现在的位置: 首页 > 综合 > 正文

poj2407

2014年10月06日 ⁄ 综合 ⁄ 共 686字 ⁄ 字号 评论关闭
Relatives

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

欧拉函数。
代码如下:
#include<stdio.h>

int euler_phi(int p){
    int phi=p;
    for(int i=2;i*i<=p;i++){
        if(!(p%i)){
            phi=phi-phi/i;
            while(!(p%i))
                p/=i;
        }
    }
    if(p>1)
        phi=phi-phi/p;
    return phi;
}

int main(void){
    int p;
    while(scanf("%d",&p),p)
        printf("%d\n",euler_phi(p));
    return 0;
}

抱歉!评论已关闭.