题目链接:一只可爱的血小板为你引路啦~
题目:
题目意思:
给定 k,求第 k 小的数 n,满足 φ(n) 是合数。(1 ≤ k ≤ 10 9 )
官方题解是这样的:
看不懂。。。。还是找规律靠谱
解释一下题目:
欧拉函数 -------对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)
互 质 -------互质是公约数只有1的两个整数,叫做互质整数。
合 数 -------合数指自然数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。与之相对的是质数,而1既不属于质数也不属于合数。最小的合数是4。
题目给定 k,求第 k 小的数 n,满足 φ(n) 是合数。(1 ≤ k ≤ 10 9 )
#include <stdio.h>
#include <iostream>
using namespace std;
int oula(int n)
{
int rea=n;
for(int i=2; i<=n; i++)
if(n%i==0)//第一次找到的必为素因子
{
rea=rea-rea/i;
do
n/=i;//把该素因子全部约掉
while(n%i==0);
}
return rea;
}
int main()
{
for(int i=1;i<=100;i++)
printf("%d ",oula(i));
return 0;
}
打个表:
2-100欧拉函数表
n φ(n)
2 1
3 2
4 2
5 4
6 2
7 6
8 4
9 6
10 4
11 10
12 4
13 12
14 6
15 8
16 8
17 16
18 6
19 18
20 8
21 12
22 10
23 22
24 8
25 20
26 12
27 18
28 12
29 28
30 8
31 30
32 16
33 20
34 16
35 24
36 12
37 36
38 18
39 24
40 16
41 40
42 12
43 42
44 20
45 24
46 22
47 46
48 16
49 42
50 20
51 32
52 24
53 52
54 18
55 40
56 24
57 36
58 28
59 58
60 16
61 60
62 30
63 36
64 32
65 48
66 20
67 66
68 32
69 44
70 24
71 70
72 24
73 72
74 36
75 40
76 36
77 60
78 24
79 78
80 32
81 54
82 40
83 82
84 24
85 64
86 42
87 56
88 40
89 88
90 24
91 72
92 44
93 60
94 46
95 72
96 32
97 96
98 42
99 60
100 40
当且仅当 n = 1,2,3,4,6 时,φ(n) 不是合数
代码:
#include<stdio.h>
int main()
{
int t, k;
scanf("%d", &t);
while( t-- )
{
scanf("%d", &k);
if( k == 1 )
{
puts("5");
}
else if( k == 2 )
{
puts("7");
}
else
{
printf("%d\n", 5 + k);
}
}
}