Description
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互质的个数。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int Euler(int x){ 4 int r=x; 5 for(int i=2;i*i<=r;i++){ 6 if(x%i==0){ 7 r=r/i*(i-1); 8 while(x%i==0)x/=i; 9 } 10 } 11 if(x>1)r=r/x*(x-1); 12 return r; 13 } 14 int main(){ 15 int n; 16 while(cin>>n&&n) 17 cout<<Euler(n)<<endl; 18 return 0; 19 }