HDU - 6322(找规律吧。。。)

题目链接:一只可爱的血小板为你引路啦~

题目:

题目意思:

给定 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);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/WQN20172674/article/details/81323384