内容:
Given n, a positive integer, how many positive integers less than n are relatively prime to n? Two integers a and b are relatively prime if there are no integers x > 1, y > 0, z > 0 such that a = xy and b = xz.
Input
There are several test cases. For each test case, standard input contains a line with n <= 1,000,000,000. A line containing 0 follows the last case.
Output
For each test case there should be single line of output answering the question posed above.
Sample Input
7
12
0
Sample Output
6
4
对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目。
My code:
#include <stdio.h>
#include <math.h>
int node (long n)
{
long i,x=n;
for(i=2;i*i<=n;i++)
{
if(x%i==0)
{
n=n/i*(i-1);
}
while(x%i==0) x/=i; //去除x中所有的质因数i,确保下次计算时i是质因数,欧拉函数
}
if(x>1) n=n/x*(x-1); //当n是由两个质因数组成的时候,条件成立
return n;
}
int main()
{
long n; //定义long型
while(scanf("%ld",&n)!=EOF) //多组数据
{
if(n==0) break;
printf("%ld\n",node(n));
}
return 0;
}