#1138. phi
phi
试题描述
给定一个正整数N,求所有不超过N且与N互质的数。互质的定义请参考后面的知识点提示。
输入要求
一个正整数N(N≤100000)
输出要求
每行一个与N互质的数,按从小到大的次序输出。
输入样例
5
输出样例
1
2
3
4
知识点及提示
若A与B没有大于1的公因子,则称A与B互质。同样地本题也可使用数组记录要输出的数。 求最大公约数可以用辗转相除法。辗转相除法又名欧几里德算法(Euclidean algorithm),乃是求两个正整数之最大公因子的算法。它是已知最古老的算法,其可追溯至3000年前。 具体方法如下:
设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用b除a,得a÷b=q……r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用r1除b,得b÷r1=q……r2 (0≤r2)。若r2=0,则(a,b)=r1,若r2≠0,则继续用r2除r1,……如此下去,直到能整除为止。其最后一个非零除数即为(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 |