【簡要題意】求1-n中與n不互質的數的個數。 n<=1e8
【分析】
當然是求然後相減啦。。。。利用公式
然後通過計算得知n至多有9個不同的質因數,所以也可以直接容斥原理。
【code】
只有容斥的部分
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,ans;
int p[50],cnt=0;
void dfs(int u,int chs,int num){
if(u>cnt){
if(!chs) return ;
if(chs&1)ans+=n/num;
else ans-=n/num;
return ;
}
dfs(u+1,chs+1,num*p[u]);
dfs(u+1,chs,num);
}
int main(){
freopen("million.in","r",stdin);
freopen("million.out","w",stdout);
cin>>n;int x=n;
for(int i=2;i*i<=x;i++){
if(x%i==0){
p[++cnt]=i;
while(x%i==0) x/=i;
}
}
if(x>1) p[++cnt]=x;
dfs(1,0,1);
cout<<ans<<endl;
return 0;
}