博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LOJ#2095 选数
阅读量:5935 次
发布时间:2019-06-19

本文共 2155 字,大约阅读时间需要 7 分钟。

给定n,k,l,r

问从[l, r]中选出n个数gcd为k的方案数。

解:稍微一想就能想到反演,F(x)就是[l, r]中x的倍数个数的n次方。

后面那个莫比乌斯函数随便怎么搞都行,当然因为这是杜教筛的题就杜教筛了。

然后写一写,交上去80分......

然后枚举一下d是k的多少倍,我们发现F(x)的计算式[(r / x) - ((l - 1) / x)]n可以整除分块...

然后就做完了。

1 #include 
2 #include
3 #include
4 5 typedef long long LL; 6 const int N = 1000010, T = 1000008; 7 const LL MO = 1000000007; 8 9 std::map
mp;10 int p[N], top, miu[N];11 LL n, k, l, r, Miu[N], L, R;12 bool vis[N];13 14 inline void getp(int n) {15 miu[1] = 1;16 for(int i = 2; i <= n; i++) {17 if(!vis[i]) {18 p[++top] = i;19 miu[i] = -1;20 }21 for(int j = 1; j <= top && i * p[j] <= n; j++) {22 vis[i * p[j]] = 1;23 if(i % p[j] == 0) {24 break;25 }26 miu[i * p[j]] = -miu[i];27 }28 }29 for(int i = 1; i <= n; i++) {30 Miu[i] = Miu[i - 1] + miu[i];31 }32 return;33 }34 35 inline LL qpow(LL a, LL b) {36 LL ans = 1;37 a %= MO;38 while(b) {39 if(b & 1) ans = ans * a % MO;40 a = a * a % MO;41 b = b >> 1;42 }43 return ans;44 }45 46 LL getMiu(LL x) {47 if(x <= 0) return 0;48 if(x <= T) return Miu[x];49 if(mp.count(x)) return mp[x];50 LL ans = 1;51 for(LL i = 2, j; i <= x; i = j + 1) {52 j = x / (x / i);53 ans -= (j - i + 1) % MO * getMiu(x / i) % MO;54 ans %= MO;55 }56 return mp[x] = (ans + MO) % MO;57 }58 59 LL F(LL x) {60 LL temp = (R / x) - (L / x);61 return qpow(temp, n);62 }63 64 int main() {65 getp(T);66 scanf("%lld%lld%lld%lld", &n, &k, &l, &r);67 LL ans = 0;68 L = (l - 1) / k, R = r / k;69 for(LL i = 1, j; i <= R; i = j + 1) {70 if(L / i) j = std::min(R / (R / i), L / (L / i));71 else if(R / i) j = R / (R / i);72 else j = R;73 ans += F(i) * (getMiu(j) - getMiu(i - 1)) % MO;74 ans %= MO;75 }76 printf("%lld\n", (ans + MO) % MO);77 78 return 0;79 }
AC代码

整除分块的时候要判断是不是0啊......

转载于:https://www.cnblogs.com/huyufeifei/p/10444324.html

你可能感兴趣的文章
Python 以指定概率获取元素
查看>>
微信公众平台图文教程(二) 群发功能和素材管理
查看>>
关于System.Collections空间
查看>>
MPP(大规模并行处理)
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
POJ2348 UVa10368 HDU1525 Euclid's Game【博弈】
查看>>
Java 位运算
查看>>
好用的CSS模块化打包工具CSS-COMBO
查看>>
python 中的字符和字符串
查看>>
C#Winform限制Textbox只能输入数字
查看>>
EL表达式经典用法
查看>>
java.lang.NoClassDefFoundError: javax/mail/Authenticator
查看>>
联想集团涨超7% 杨元庆持股比例升至8.12%
查看>>
各省光伏十三五规划汇总:总规模将超130GW
查看>>
Apache Storm 官方文档 —— 常用模式
查看>>
聊聊JVM的年轻代
查看>>
lvm逻辑卷管理
查看>>
VS2010不能断点/下断的问题
查看>>
[Android]权限处理
查看>>
Spark bind on port 0. Attempting port 1 问题解决
查看>>