您的位置:首页 > 其它

POJ2407:Relatives(欧拉函数)

2012-11-24 10:25 501 查看
Relatives

Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 9411Accepted: 4453
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
MYCode:

#include<iostream>

#include<cstring>

#include<cstdio>

#include<cmath>

using namespace std;

int euler(int x)

{

int res=x;

int i;

for(i=2;i*i<=x;i++)

{

if(x%i==0)

{

res=res*1.0/i*(i-1);

while(x%i==0)x/=i;

}

}

if(x>1)res=res/x*(x-1);

return res;

}

int main()

{

int p;

while(scanf("%d",&p))

{

if(p==0)

break;

int ans=euler(p);

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

}

}

//
欧拉函数模板题,可以使用素数表优化.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: