快速切题 sgu102.Coprimes 欧拉函数 模板程度 难度:0

102. Coprimes

time limit per test: 0.25 sec. 
memory limit per test: 4096 KB

 

For given integer N (1<=N<=104) find amount of positive numbers not greater than N that coprime with N. Let us call two positive integers (say, A and B, for example) coprime if (and only if) their greatest common divisor is 1. (i.e. A and B are coprime iff gcd(A,B) = 1).

 

Input

Input file contains integer N.

 

Output

Write answer in output file.

 

Sample Input

9

Sample Output

6

注意欧拉函数只需要统计质因子

#include <cstdio>

#include <cmath>

using namespace std;

const int maxn=100;

int n;

int prim[maxn],len;

void divide(){

    len=0;

    int tn=n;

    int r=sqrt(n+0.5)+1;

    for(int i=2;i<r;i++){

        if(tn%i==0){

            prim[len++]=i;

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

        }

    }

    if(tn!=1)prim[len++]=tn;

}

int phi(){

    int ans=n;

    for(int i=0;i<len;i++){

        ans/=prim[i];

        ans*=prim[i]-1;

    }

    return ans;

}

int main(){

    while(scanf("%d",&n)==1){

        divide();

        int amount=phi();

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

    }

    return 0;

}

  

你可能感兴趣的:(Prim)