Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3717 Accepted Submission(s): 1650
No? Oh, you must do this when you want to become a "Big Cattle".
Now you will find that this problem is so familiar:
The greatest common divisor GCD (a, b) of two positive integers a and b, sometimes written (a, b), is the largest divisor common to a and b. For example, (1, 2) =1, (12, 18) =6. (a, b) can be easily found by the Euclidean algorithm. Now I am considering a little more difficult problem:
Given an integer N, please count the number of the integers M (0<M<N) which satisfies (N,M)>1.
This is a simple version of problem “GCD” which you have done in a contest recently,so I name this problem “GCD Again”.If you cannot solve it still,please take a good think about your method of study.
Good Luck!
#include <ctype.h> #include <cstdio> void read(int &x) { x=0;bool f=0;register char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=1; for(; isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+ch-'0'; x=f?(~x)+1:x; } int k,a=1; int getphi(int n) { int ans=n; if(n%2==0) { while(n%2==0) n/=2; ans/=2; } for(int i=3;i*i<=n;i+=2) { if(n%i==0)//这一句再忘写就剁手!!! { while(n%i==0) n/=i; ans=ans/i*(i-1); } } if(n>1) ans=ans/n*(n-1); return ans; } int main() { for(;a;) { read(k); if(!k) break; int ans=k-getphi(k)-1; printf("%d\n",ans); } return 0; }