首页 > 其他 > 详细

Codeforces 920G(二分+容斥)

时间:2018-02-03 23:59:00      阅读:316      评论:0      收藏:0      [点我收藏+]

题意:

  定义F(x,p)表示的是一个数列{y},其中gcd(y,p)=1且y>x

  给出x,p,k,求出F(x,p)的第k项

  x,p,k<=10^6

分析:

  很容易想到先二分,再做差

  然后问题就变成了[1,x]内有多少个数是和p互质的

  我们可以先将p质因数分解,然后用这些数组合去在[1,x]容斥就行了

技术分享图片
 1 long long cal(long long x)
 2 {
 3     int n=f.size();
 4     long long ans=0;
 5     for(int i=0;i<(1<<n);++i)
 6     {
 7         long long num=1;
 8         int sgn=1;
 9         for(int j=0;j<n;++j)
10             if((1<<j)&i) num*=f[j],sgn*=-1;
11         ans+=sgn*(x/num);
12     }
13     return ans;
14 }
View Code

 

Codeforces 920G(二分+容斥)

原文:https://www.cnblogs.com/wmrv587/p/8410977.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!