1065 - 互质
给你一个正整数n,请问有多少个比n小的且与n互质的正整数?
两个整数互质的意思是,这两个整数没有比1大的公约数。
Input
输入包含多组测试数据。每组输入是一个正整数n(n<=1000000000)。当n=0时,输入结束。
Output
对于每组输入,输出比n小的且与n互质的正整数个数。
Examples
Input
7 12 0
Output
6 4
Solution C
#include<stdio.h> int eular(int n) { int ret=1,i; for(i=2;i*i<=n;i++) if(n%i==0) { n/=i; ret*=i-1; while(n%i==0) { n/=i; ret*=i; } } if(n>1) ret*=n-1; return ret; } int main() { int n; while(scanf("%d",&n)!=EOF,n) printf("%d\n",eular(n)); return 0; }
Solution C++
#include<stdio.h> int eular(int n) { int ret=1,i; for(i=2;i*i<=n;i++) if(n%i==0) { n/=i; ret*=i-1; while(n%i==0) { n/=i; ret*=i; } } if(n>1) ret*=n-1; return ret; } int main() { int n; while(scanf("%d",&n)!=EOF,n) printf("%d\n",eular(n)); return 0; }