U - Relatives(欧拉函数)

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 }

猜你喜欢

转载自www.cnblogs.com/acgoto/p/9317225.html