Relatives
Time Limit: 1000MS |
|
Memory Limit: 65536K |
Total Submissions: 6232 |
|
Accepted: 2786 |
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
7120
Sample Output
64
題目大意:給定一個數(小於1,000,000,000),求與他互質數的個數。。
思路:利用歐拉函數,將n素因子分解,帶入歐拉函數求值。。
#include<iostream>#include<cmath>using namespace std;__int64 o(__int64 a,__int64 b){if(!a)return b;return o(b%a,a);}int main(){__int64 i,n,o1,o2,gys;while(scanf("%I64d",&n)&&n){if(n==1){cout<<'0'<<endl;continue;}o1=n;o2=1;for(i=2;i<=(int)sqrt((double)n);i++)if(n%i==0){o1*=(i-1);o2*=i;gys=o(o1,o2);o1/=gys;o2/=gys;while(n%i==0)n/=i;}if(n!=1){o1*=(n-1);o2*=n;gys=o(o1,o2);o1/=gys;o2/=gys;}printf("%I64d/n",o1);}return 0;}