Relatives(poj2407)(求大数的欧拉函数模板题)

来源:互联网 发布:我的世界0.15js家具 编辑:程序博客网 时间:2024/05/17 01:37


Link:http://poj.org/problem?id=2407


Relatives
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 12582 Accepted: 6144

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

Source

Waterloo local 2002.07.01



AC code:

#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<cmath>#include<queue>#include<map>#include<stack>#include<vector>#define LL long long#define MAXN 100010using namespace std;//直接求解欧拉函数int euler(int n){ //返回euler(n)      int res=n,a=n;     for(int i=2;i*i<=a;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)){if(n==0)break;printf("%d\n",euler(n)); }   return 0;}


0 0
原创粉丝点击