【题目描述】
给定一个正整数n,询问有多少个正整数小于n且与n互为素数。
【输入描述】
每行一个测试样例n ( n <= 1000000000 )。测试样例以0结束。
【输出描述】
对于每一行测试样例,输出一个答案。
【输入样例】
7
12
0
【输出样例】
6
4
源代码: #include<cstdio> #include<cmath> int n; void Euler() { if (n==1) printf("0\n"); //在正规的欧拉函数中,φ(1)=1。 else { int m=trunc(sqrt(n)),ans=n; for (int a=2;a<=m;a++) if (!(n%a)) { ans=ans/a*(a-1); while (!(n%a)) n/=a; } if (n>1) ans=ans/n*(n-1); printf("%d\n",ans); } } int main() { scanf("%d",&n); while (n) { Euler(); scanf("%d",&n); } return 0; }