例题 一道简单的几何变换
欧拉函数:对于一个正整数n,1~n-1中有多少互素的
延伸:对于一个正整数n,不大于的n的与n互素的正整数和等于1/2xNxf(n);
#include"bits/stdc++.h"
using namespace std;
typedef long long ll;
const int len=1e5+5;
ll tot;
ll pri[len],phi[len],visit[len];
ll n;
void get(){
phi[1]=1;
for(int i=2;i<=len;i++){
if(visit[i]==0){
pri[++tot]=i;
phi[i]=i-1;
}
for(int j=1;j<=tot&&pri[j]*i<=len;j++){
visit[i*pri[j]]=1;
if(i%pri[j]==0){
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
else phi[i*pri[j]]=phi[i]*(pri[j]-1);
}
}
}
int main(){
get();
while(cin>>n){
ll sum=0,pos=0;;
for(int i=1;i<=tot&&pri[i]<=n;i++){
int c=1;
pos++;
while(pri[i]*c<=n)sum+=phi[c++];
}
cout<<2*sum-pos<<endl;
}
return 0;
}