BZOJ 3930 选数 (莫比乌斯反演+神奇的杜教筛)
来源:互联网 发布:淘宝童装拍照技巧 编辑:程序博客网 时间:2024/05/16 18:45
(对于100%的数据,1≤N,K≤10^9,1≤L≤H≤10^9,H-L≤10^5)
这个题要是数据范围出小一些解释个裸的莫比乌斯反演。
问题就是数据范围太鬼畜,我们无法筛出这个范围的莫比乌斯函数前缀和。
这时就要用到杜教筛,它是用来解决 n<= 10^11 时的一些积性函数的前缀和问题的
本鶸对此理解还不深,大家可以自行上网找相关博客。
这一篇就很好
author: skywalkert
original article: skywalkert
last update time : 2017-04-01
然后就是裸的莫比乌斯过程了
代码:
#include <iostream>#include <stdio.h>#include <math.h>#include <string.h>#include <vector>#include <algorithm>#include <map>using namespace std;typedef long long LL;#define fi first#define se secondconst int MAXN=10000000+23;const LL MOD=1e9+7;map<LL,LL>mu_sum;LL miu[MAXN],prime[MAXN],total;bool isprime[MAXN];void make(){ LL m=MAXN-3; memset(isprime,true,sizeof(isprime)); isprime[1]=isprime[0]=false; miu[1]=1; total=0; for(int i=2;i<=m;i++) { if(isprime[i])prime[++total]=i,miu[i]=-1; for(int j=1;j<=total&&prime[j]*i<=m;j++) { isprime[i*prime[j]]=false; if(i%prime[j])miu[i*prime[j]]=-miu[i]; else {miu[i*prime[j]]=0;break;} } } for(int i=2;i<=m;i++)miu[i]+=miu[i-1];}LL cal(int x){ if(x<=10000000) return miu[x]; if(mu_sum.find(x)!=mu_sum.end()) return mu_sum[x]; long long i,last,re=1; for(i=1;i<=x;i=last+1) { last=x/(x/i); if(x/i-1) re-=(cal(last)-cal(i-1))*(x/i-1); } return mu_sum[x]=re;}LL quick(LL x,LL n){ LL res=1; while(n) { if(n&1)res=res*x%MOD; x=x*x%MOD; n>>=1; } return res%MOD;}LL n,k,h,l;int main(){ make(); while(scanf("%lld%lld%lld%lld",&n,&k,&l,&h)!=-1) { l--;l/=k;h/=k; LL res=0; for(LL i=1,last;i<=h;i=last+1) { if(i<=l)last=min(l/(l/i),h/(h/i)); else last=h/(h/i); LL a=h/i,b=l/i; res+=(cal(last)-cal(i-1))*quick((a-b),n); res=(res%MOD+MOD)%MOD; } printf("%lld\n",res%MOD); } return 0;}
一开始自己写的巨丑,看了网上dalao的之后才写对
另外还有一种递推的写法,那个我真心看不懂
阅读全文
0 0
- BZOJ 3930 选数 (莫比乌斯反演+神奇的杜教筛)
- BZOJ 3930 CQOI2015 选数 莫比乌斯反演
- bzoj 3930: [CQOI2015]选数 莫比乌斯反演+杜教筛
- 【BZOJ】【P2045】【双亲数】【题解】【莫比乌斯反演】
- 【BZOJ】【P2440】【中山市选2011】【完全平方数】【题解】【莫比乌斯反演】
- 【BZOJ 2440】[中山市选2011]完全平方数 莫比乌斯反演+容斥
- BZOJ 2440: [中山市选2011]完全平方数 莫比乌斯反演 +容斥原理
- CQOI2015 选数 莫比乌斯反演 杜教筛
- BZOJ 2440 完全平方数(莫比乌斯反演+容斥原理+二分)
- BZOJ 2440-完全平方数(二分答案+莫比乌斯反演)
- bzoj 2440: [中山市选2011]完全平方数(二分,容斥,莫比乌斯反演)
- bzoj 2301 莫比乌斯反演
- bzoj 2301 莫比乌斯反演
- bzoj 2820 莫比乌斯反演
- BZOJ 2818(莫比乌斯反演)
- bzoj 2820 莫比乌斯反演
- BZOJ 2820 莫比乌斯反演
- BZOJ 3309 莫比乌斯反演
- 数据结构——顺序栈
- Centos7 的Docker上如何安装MySQL
- Socket编程中检测端口是否被占用
- collections
- uploadify 上传文件出现HTTP 404错误
- BZOJ 3930 选数 (莫比乌斯反演+神奇的杜教筛)
- 把一个数组里的数组合全部列出来,例如1和2列出来为1,2,12,21
- APP专项测试常用adb命令
- Android Studio编译出现null value in entry :incrementalFolder问题解决方法
- JavaScript的作用域说明
- Sphinx配置
- 华为OJ——计算字符串的相似度
- 设计模式之类对象结构型 — COMPOSITE(组合)模式
- iOS获取设备唯一标识