首页 > 代码库 > HDU 4135
HDU 4135
状态压缩
其实刚开始没看懂为什么要用位运算
后来看了别人的注释
逐渐明白
我也加上注释吧
1 #include <iostream> 2 using namespace std; 3 4 long long Prime[50];//存放N的质因子 5 6 7 long long getNonCoPrime(long long num,int m)//计算非互质数的多少 8 { 9 long long ans=0,flag,temp;10 for(long long i =1;i<(long long)(1<<m);i++)//用二进制串来表示每个质因子是否被取11 {12 temp = 1;13 flag = 0;14 for(int j = 0;j<m;j++)//判断每位是否取到15 {16 if(i&((long long)(1<<j)))//如果取了17 {18 flag++;19 temp*=Prime[j];20 }21 }22 if(flag&1)//容斥原理 ,奇加偶减 23 {24 ans+=num/temp;25 }else{26 ans-=num/temp;27 }28 29 }30 return ans;31 }32 33 34 int main()35 {36 int T;37 cin>>T;38 int t =T;39 40 while(T--)41 {42 long long A,B;43 int N;44 cin>>A>>B>>N;45 int j =0;46 for(int i = 2;i*i<=N;i++)//获得质因子47 {48 if(N&&N%i==0)49 {50 Prime[j]=i;51 j++;52 while(N&&N%i==0)//避免重复53 {54 N/=i;55 }56 }57 }58 if(N>1)59 Prime[j++]=N;60 long long result = B-A-(getNonCoPrime(B,j) -getNonCoPrime(A-1,j))+1;61 cout<<"Case #"<<t-T<<": "<<result<<endl;62 }63 return 0;64 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。