Relatives
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 15063 | Accepted: 7611 |
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
代码
//一个大于1的数都是可以分成质数的乘方之积
#include<iostream>
using namespace std;
int phi(int a){
int temp=a;
for(int i=2;i*i<=a;i++)
{
if(a%i==0) //质因数首先要是因数
{
while(!(a%i)) a/=i; //把当前质数的乘方(一定是乘方比如24除掉2的平方4而不是除掉2,否则就尴尬了)先除了再求下一个质因数
temp=temp/i*(i-1);
}
}
if(a!=1) temp=temp/a*(a-1);//如果不是1的话就意味着剩下的那个一定也是一个质因数,所以要再求一次,这个比较容易忽略
return temp;
}
int main(){
int a;
while(cin>>a && a!=0)
{
cout<<phi(a)<<endl;
}
}