1491: 【中级考试】phi

Memory Limit:128 MB Time Limit:1.000 S
Judge Style:Text Compare Creator:
Submit:76 Solved:16

Description

给定一个正整数N求所有不超过N且与N互质的数。互质的定义请参考后面的知识点提示。

Input

一个正整数N(N100000)

Output

第一行一个数M,表示与N互质的数的个数
  
2行至第M+1行,每行一个与N互质的数,按从小到大的次序输出

Sample Input Copy

5

Sample Output Copy

4
1
2
3
4

HINT

AB没有大于1的公因子,则称AB互质。同样地本题也可使用数组记录要输出的数。求最大公约数可以用辗转相除法。辗转相除法又名欧几里德算法(Euclidean algorithm),乃是求两个正整数之最大公因子的算法。它是已知最古老的算法,其可追溯至3000年前。具体方法如下:

设两数为ab(ab),求ab最大公约数(a,b)的步骤如下:用ba,得a÷b=q……r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用r1b,得b÷r1=q……r2 (0≤r2)。若r2=0,则(ab)=r1,若r2≠0,则继续用r2r1……如此下去,直到能整除为止。其最后一个非零除数即为(a,b)。下面通过一个实例说明,其中“a mod b”是指取 a÷b 的余数。例如,123456 7890 的最大公因子是 6,这可由下列步骤看出:

a

b

a mod b

123456

7890

5106

7890

5106

2784

5106

2784

2322

2784

2322

462

2322

462

12

462

12

6

12

6

0

 

Source/Category