hdu 1286 找新朋友

题目链接:点击打开链接


欧拉函数模板题。

欧拉函数返回小于N的数中有多少与N互质的数。具体请百度百科。模板有一些地方写的很好,加了注释。

代码:

#include <iostream>
#include <cstdio>
using namespace std;

int p[36000];

void euler(){
    for(int i=1;i<=35000;i++){
        if(i&1) p[i]=i;
        else p[i]=i/2;//与偶数i互质的数的个数为i/2
    }
    for(int i=3;i<=35000;i+=2){
        if(p[i]==i)//这里可以保证i一定是质数
        for(int j=i;j<=35000;j+=i){
            p[j]=p[j]*(i-1)/i;
        }
    }
}

int main(){
    euler();
    int T;
    cin>>T;
    while(T--){
        int n;
        cin>>n;
        cout<<p[n]<<endl;
    }
    return 0;
}


你可能感兴趣的:(欧拉函数)