您的位置:首页 > 其它

poj2407(欧拉函数-套模板)

2013-05-30 11:06 537 查看
http://poj.org/problem?id=2407

Relatives

Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 9323Accepted: 4398
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

7
12
0

Sample Output

6
4

Source

Waterloo local 2002.07.01

题意:就是求小于n且与n互质的数的个数

明显的欧拉函数直接套的模版。。(ps:自己专用模版)
#include

#include

#include

using namespace std;

int n;

int gcd(int a,int b)

{

return
b?gcd(b,a%b):a;

}

inline int lcm(int a,int b)

{

return
a/gcd(a,b)*b;

}

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()

{


while(scanf("%d",&n)!=EOF)

{


if(n==0)


{


break;


}


printf("%d\n",eular(n));

}

return
0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: