【BZOJ】3930: [CQOI2015]选数
题意
从区间\([L, R]\)选\(N\)个数(可以重复),问这\(N\)个数的最大公约数是\(K\)的方案数。(\(1 \le N, K \le 10^9, 1 \le L \le R \le 10^9, H-L \le 10^5\))
分析
好神的题。注意\(H-L \le 10^5\)这个条件,则假设\(N\)个数不全相同,那么他们的最大公约数小于最大和最小的两个数之差,证明很简单,设\(d\)为最大公约数,则\(dk_2 -dk_1 = d( k_2 - k_1 ) > d\)
题解
因此我们可以先算出\(N\)个数不全相同的方案数,然后再特判一下全相同的情况,加起来就是答案了。
计算前者我们可以将边界除以\(K\),然后在新边界里面找最大公约数为\(1\)的方案数。由于新边界最大于最小之差不超过\(10^5\),因此我们暴力枚举一下这些公约数,用容斥剪掉重复的即可。也就是说:
\]
\(sum\)的计算注意剪掉\(N\)个数相同的方案。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mo=1000000007;
int ipow(int a, int b) {
int x=1;
a%=mo;
for(; b; b>>=1, a=(ll)a*a%mo)
if(b&1) x=(ll)x*a%mo;
return x;
}
int d[100005];
int main() {
int N, K, L, R, MX, flag=0;
scanf("%d%d%d%d", &N, &K, &L, &R);
if(L<=K && K<=R) flag=1;
L=(L-1)/K, R=R/K;
MX=R-L;
for(int i=MX; i>=1; --i) {
int &now=d[i];
ll l=L/i, r=R/i, t=r-l;
if(l<r) {
now=(ipow((t), N)-t+mo)%mo;
for(int j=i<<1; j<=MX; j+=i) now=(now-d[j]+mo)%mo;
}
}
printf("%d\n", d[1]+flag);
return 0;
}
【BZOJ】3930: [CQOI2015]选数的更多相关文章
- BZOJ 3930: [CQOI2015]选数 递推
3930: [CQOI2015]选数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pro ...
- 【刷题】BZOJ 3930 [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- bzoj 3930: [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- BZOJ 3930: [CQOI2015]选数 莫比乌斯反演
https://www.lydsy.com/JudgeOnline/problem.php?id=3930 https://blog.csdn.net/ws_yzy/article/details/5 ...
- 【递推】BZOJ 3930: [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- bzoj 3930: [CQOI2015]选数【快速幂+容斥】
参考:https://www.cnblogs.com/iwtwiioi/p/4986316.html 注意区间长度为1e5级别. 则假设n个数不全相同,那么他们的gcd小于最大数-最小数,证明:则gc ...
- bzoj 3930: [CQOI2015]选数【递推】
妙啊 这个题一上来就想的是莫比乌斯反演: \[ f(d)=\sum_{k=1}^{\left \lceil \frac{r}{d} \right \rceil}\mu(k)(\left \lceil ...
- BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛
求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$ $\Rightarrow \sum_{i=\frac{L}{k}}^{\fra ...
- 3930: [CQOI2015]选数
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1958 Solved: 979[Submit][Status][Discuss] Descripti ...
随机推荐
- python 模块基础介绍
从逻辑上组织代码,将一些有联系,完成特定功能相关的代码组织在一起,这些自我包含并且有组织的代码片段就是模块,将其他模块中属性附加到你的模块的操作叫做导入. 那些一个或多个.py文件组成的代码集合就称为 ...
- golang笔记——流程控制
条件语句 if ... else if ... else 语句,如: { fmt.Println(">100") } < num { fmt.Println(" ...
- JS高级群的日常
北京-z兄*10031*33) 2015/6/5 13:38:01北京-逍遥君武*5611*7) 2015/6/5 13:3*:082上海-goesby<woshixuleijava@****. ...
- 3、CCS样式表
一.CCS样式表的分类(优先级从低到高): 1.浏览器默认样式表 2.外部样式表:在外部创建的.ccs文件中.使用外部样式表可以使样式应用于多个网页.通过这个方法只需改动一个文件就能改变整个网站的外观 ...
- jquery选择器(总结)
基本选择器 选择器 描述 示例 #id 根据给定的ID匹配一个元素 $("#id") .class 根据制定的class匹配一个元素 $(".class") ...
- C和指针 第八章 习题
8.5矩阵运算,A是一个x行,y列矩阵,B是y行z列矩阵,把A和B相乘,结果是另外一个x行z列矩阵,每个位置的值由下公式决定,编写函数: #include <stdio.h> void m ...
- VMware中的Ubuntu网络设置
网络配置: VMware安装后会有两个默认网卡,分别是VMnet8(192.168.83.1)和VMnet1(192.168.19.1),当然不同的机器上,这两个网卡的 IP会不同的.在windows ...
- jq 实现无限级地区联动 样式为bootstrap
HTML 部分 <div class="row" style="margin:100px auto;"> <form method=" ...
- MVC前台页面做登录验证
最近接触了一个电商平台的前台页面,需要做一个登录验证,具体情况是:当用户想要看自己的订单.积分等等信息,就需要用户登录之后才能查询,那么在MVC项目中我们应该怎么做这个前台的验证呢? 1.我在Cont ...
- C#调用webservice简单实例
如何利用IIS创建webservice不多做阐述,直接讲C#代码中如何调用已创建好的webservice. 首先在VS2010中新建一个工程项目,然后右键点击工程名选择添加服务引用. 在URL一栏中输 ...