Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 13044 | Accepted: 6464 |
Description
Input
Output
Sample Input
7 12 0
Sample Output
6 4
Source
Waterloo local 2002.07.01
对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。例如euler(8)=4,因为1,3,5,7均和8互质。
Euler函数表达通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn为x的所有素因数,x是不为0的整数。euler(1)=1(唯一和1互质的数就是1本身)。
欧拉公式的延伸:一个数的所有质因子之和是euler(n)*n/2。
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ac(int n) { int res=n; int a=n; for(int i=2;i*i<=n;i++) { if(a%i==0) { res=res/i*(i-1); while(a%i==0) a/=i; } } if(a>1) res=res/a*(a-1); return res; } int main() { int n; while(scanf("%d",&n),n) { int ans=ac(n); printf("%d\n",ans); } return 0; }