hdu 4407 Sum 容斥原理
2013-08-20 21:51
351 查看
思路:主要考虑求1-n中与p互质数的和。直接不好求解,反着来!
求1-n中与p不互质的数的和。由于p=p1^e1*p2^e2……
所以有容斥原理来解决。
代码如下:
View Code
求1-n中与p不互质的数的和。由于p=p1^e1*p2^e2……
所以有容斥原理来解决。
代码如下:
#include<iostream> #include<vector> #include<algorithm> #include<cstdio> #include<cstring> #include<map> #define ll __int64 using namespace std; map<int,int>mm; map<int,int>::iterator it; bool f[1000]; int factor[1000],prime[1000],cnt,num,cn; ll an[400001]; void init() { int i,j; cnt=0; for(i=2;i<1000;i++){ if(f[i]==0) prime[cnt++]=i; for(j=0;j<cnt&&i*prime[j]<1000;j++){ f[i*prime[j]]=1; if(i%prime[j]==0) break; } } } void fac(int n) { num=0; for(int i=0;i<cnt&&prime[i]*prime[i]<=n;i++){ if(n%prime[i]==0){ factor[num++]=prime[i]; n/=prime[i]; while(n%prime[i]==0) n/=prime[i]; } } if(n>1) factor[num++]=n; } void dfs(ll sum,int nn,int cc) { an[cn++]=cc*sum; for(int i=nn+1;i<num;i++) dfs(sum*factor[i],i,-cc); } int gcd(int a,int b) { if(a<b) swap(a,b); while(b){ int t=a; a=b; b=t%b; } return a; } int main() { int i,j,t,n,m,s,qq,a,b,c,x,y,p; init(); ll ans,ans2,ans1,tt; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); mm.clear(); qq=0; for(i=0;i<m;i++){ scanf("%d",&s); if(s==2){ scanf("%d%d",&a,&b); mm[a]=b; } else{ scanf("%d%d%d",&x,&y,&p); if(x>y) swap(x,y); ans=(ll)(x+y)*(y-x+1)/2; cn=0; fac(p); for(j=0;j<num;j++) dfs(factor[j],j,1); for(j=0;j<cn;j++){ if(an[j]>x-1) continue; if(an[j]<0) tt=(x-1)/(-an[j]); else tt=(x-1)/an[j]; ans+=(ll)tt*(tt+1)/2*an[j]; } for(j=0;j<cn;j++){ if(an[j]>y) continue; if(an[j]<0) tt=y/(-an[j]); else tt=y/an[j]; ans-=(ll)tt*(tt+1)/2*an[j]; } for(it=mm.begin();it!=mm.end();it++){ int ff=it->first; int ss=it->second; if(ff<x||ff>y) continue; int t1=gcd(p,ff); int t2=gcd(p,ss); if(t1==1) ans-=ff; if(t2==1) ans+=ss; } printf("%I64d\n",ans); } } } return 0; }
View Code
相关文章推荐
- HDU 4407 Sum(容斥原理+质因数分解)
- HDU 4407 Sum <容斥原理>
- HDU 4407 Sum ★(容斥原理)
- HDU 4407 - Sum(容斥原理)
- HDU 4407 Sum(容斥原理+状态压缩)
- [容斥原理] hdu 4407 Sum
- HDU 4407 Sum ★(容斥原理)
- hdu 4407 Sum(容斥原理)
- hdu 4407 Sum 容斥原理
- HDU 4407 Sum(容斥原理)
- Hdu 4407 Sum(容斥原理)
- HDU 4407 Sum(容斥原理)
- HDU 4407 Sum 解题报告(容斥原理)
- [容斥原理] hdu 4407 Sum
- hdu 4407 Sum(容斥原理)
- HDU 4407 Sum (容斥原理)
- HDU 4407 sum 容斥原理
- HDU 4407 SUM 【数论,容斥原理】
- HDU 4407 Sum(12年金华 容斥原理)
- hdu 4407 SUM(容斥原理)