题目链接:点击打开链接
欧拉函数模板题。
欧拉函数返回小于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;
}
238



被折叠的 条评论
为什么被折叠?



