C语言编程练习32:互质
题目描述
给你一个正整数n,请问有多少个比n小的且与n互质的正整数?
两个整数互质的意思是,这两个整数没有比1大的公约数。
两个整数互质的意思是,这两个整数没有比1大的公约数。
输入
输入包含多组测试数据。每组输入是一个正整数n(n<=1000000000)。当n=0时,输入结束。
输出
对于每组输入,输出比n小的且与n互质的正整数个数。
样例输入 Copy
7
12
0
样例输出 Copy
6
4
#include<cstdio> #include<cmath> int main() { int N,n; while(scanf("%d",&N)!=EOF) { if(N==0) break; n=N; for(int i=2;i<=sqrt(N);i++)//使用欧拉函数解决的问题; if(N%i==0) { n=n/i*(i-1); while(N%i==0) N/=i; //根据欧拉函数的的定义; } if(N>1) n=n/N*(N-1); //这一步不能遗忘; printf("%d\n",n); } return 0; }
转自:https://blog.csdn.net/Joe19310/article/details/73369368