题目

从区间 [ l ∼ r ] [l\sim r] [l∼r]中选取 n n n个整数,总共有 ( r − l + 1 ) n (r-l+1)^n (r−l+1)n种方案。问最大公约数刚好为 k k k的选取方案有多少个。


分析

那么也就是在求 [ ⌈ l k ⌉ ∼ ⌊ r k ⌋ ] 中 选 取 [\lceil\frac{l}{k}\rceil\sim\lfloor\frac{r}{k}\rfloor]中选取 [⌈kl​⌉∼⌊kr​⌋]中选取n 个 整 数 , 最 大 公 约 数 刚 好 为 1 的 选 取 方 案 数 个整数,最大公约数刚好为1的选取方案数 个整数,最大公约数刚好为1的选取方案数
那么之后怎么做呢,因为 r − l r-l r−l比较小,所以说可以选择枚举因数 i i i,那么缩小的范围就变为 [ ⌈ ⌈ l k ⌉ i ⌉ ∼ ⌊ ⌊ r k ⌋ i ⌋ ] [\lceil\frac{\lceil\frac{l}{k}\rceil}{i}\rceil\sim\lfloor\frac{\lfloor\frac{r}{k}\rfloor}{i}\rfloor] [⌈i⌈kl​⌉​⌉∼⌊i⌊kr​⌋​⌋],那么其中的数就是对于因数为 i i i时,范围内除以 i i i的数,设 d p [ i ] dp[i] dp[i]为选取的数公因数是 i i i的个数,那么 d p [ i ] = ( ⌊ ⌊ r k ⌋ i ⌋ − ⌈ ⌈ l k ⌉ i ⌉ + 1 ) n − ( ⌊ ⌊ r k ⌋ i ⌋ − ⌈ ⌈ l k ⌉ i ⌉ + 1 ) dp[i]=(\lfloor\frac{\lfloor\frac{r}{k}\rfloor}{i}\rfloor-\lceil\frac{\lceil\frac{l}{k}\rceil}{i}\rceil+1)^n-(\lfloor\frac{\lfloor\frac{r}{k}\rfloor}{i}\rfloor-\lceil\frac{\lceil\frac{l}{k}\rceil}{i}\rceil+1) dp[i]=(⌊i⌊kr​⌋​⌋−⌈i⌈kl​⌉​⌉+1)n−(⌊i⌊kr​⌋​⌋−⌈i⌈kl​⌉​⌉+1)
那问题是我们求的是1,那可以干什么呢,我们枚举i的倍数, d p [ i ] − = ∑ j = 2 x d p [ i j ] dp[i]-=\sum_{j=2}^{x}dp[ij] dp[i]−=∑j=2x​dp[ij],这样就可以求出最大公因数是 i i i的个数,时间复杂度 O ( 2 × ( r − l ) log ⁡ 2 ( r − l ) ) O(2\times (r-l)\log_2(r-l)) O(2×(r−l)log2​(r−l))


代码

#include <cstdio>
#define rr register
using namespace std;
const int mod=(int)1e9+7;
int n,k,l,r,dp[100001];
inline signed ksm(long long x,int y){rr long long ans=1;while (y){if (y&1) (ans*=x)%=mod;(x*=x)%=mod; y>>=1;}return ans;
}
signed main(){scanf("%d%d%d%d",&n,&k,&l,&r);l=l/k+(l%k>0),r/=k;if (l>r) return !putchar(48);for (rr int i=1;i<=r-l;++i){rr int L=l/i+(l%i>0),R=r/i;if (L>R) break;dp[i]=(ksm(R-L+1,n)-R+L-1+mod)%mod;}for (rr int i=r-l;i;--i)for (rr int j=2;i*j<=r-l;++j)(dp[i]-=dp[i*j]-mod)%=mod;if (l==1) (++dp[1])%=mod;//如果最后扩散到的范围在1上,那么1要多加return !printf("%d",dp[1]);
}

#快速幂,eratosthenes筛#bzoj 3930 洛谷 3172 选数相关推荐

  1. 洛谷P1036选数(素数+组合数)

    题目链接:https://www.luogu.org/problemnew/show/P1036 主要考两个知识点:判断一个数是否为素数.从n个数中选出m个数的组合 判断一个数是否为素数: 素数一定是 ...

  2. 洛谷 P1036 选数

    P1036 选数 题目描述 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别 ...

  3. 【洛谷】选数---深度优先搜索+单调不降去重

    题目描述 传送门:https://www.luogu.com.cn/problem/P1036 已知n个整数x1,x2-xn,以及一个整数k(k<n).从n个数字中任选k个数字相加,可分别得到一 ...

  4. 洛谷 - P1036 选数(递归)

    题目链接:点击查看 题目大意:给出n个数,我们需要从中选k个作为一个新的集合,问新集合的权值和有多少是素数 题目分析:这个题目考考察了两点: 判断素数 设计递归 为什么把判断素数单独列出来了呢?因为一 ...

  5. 洛谷P1036选数题解--zhengjun

    题目描述 已知 nnn 个整数 x1,x2,-,xnx_1,x_2,-,x_nx1​,x2​,-,xn​,以及111 个整数 kkk (k<nk<nk<n).从 nnn 个整数中任选 ...

  6. 信息学奥赛一本通 1321:【例6.3】删数问题(Noip1994) | 洛谷 P1106 删数问题

    [题目链接] ybt 1321:[例6.3]删数问题(Noip1994) 洛谷 P1106 删数问题 [题目考点] 1. 贪心 [解题思路] 解法1:每次找k+1个数中的最小值 假设我们从左向右扫描每 ...

  7. 洛谷省选斗兽场全通关祭~以及之后的打算!

    18/5/2:洛谷省选斗兽场全通关祭! 洛谷也算是坚持了下去,到现在为止已经是有244道题AC了. 虽然我各大oj的刷题量加在一起也没有大佬的十分之一,我的智商也不及大佬的百分之一,但是相信智商刷也是 ...

  8. #莫比乌斯反演#BZOJ 2671 洛谷 4466 和与积 Calc

    题目 求有多少对(a,b)(a,b)(a,b)满足1≤a<b≤n1\leq a<b\leq n1≤a<b≤n且a+b∣aba+b|aba+b∣ab 分析 若gcd(a,b)=1gcd ...

  9. BZOJ 4385 洛谷3594 POI2015 WIL-Wilcze doły

    [题解] 手残写错调了好久QAQ...... 洛谷的数据似乎比较水.. n个正整数!!这很重要 这道题是个类似two pointer的思想,外加一个单调队列维护当前区间内长度为d的子序列中元素之和的最 ...

最新文章

  1. 网络空间安全之信息追踪——学习笔记 利用门户网站,综合信息追踪
  2. XAMPP环境下配置Phalcon框架
  3. mysql存储过程queue_mysql – 在Sequelize中调用输入/输出类型存储过程
  4. 世界上没有后悔药,时间匆匆,从关注它们开始......
  5. java 工作6年 面试_为什么不想搞Java了,6年经验去面试5分钟结束,现在Java面试为何这么难...
  6. struct.error: cannot convert argument to integer解决办法
  7. Linux软件间的依赖关系(转)
  8. IDEA报错:java: Compilation failed: internal java compiler error
  9. python删除过期文件_python 删除过期文件的方法+源码
  10. WinHex18.4算法分析
  11. mini聊天室(Linux下基于UDP实现的群聊系统)
  12. 计算机做无线AP共享文件,Windows 7妙用 笔记本变无线AP轻松共享
  13. obj类型的3d人体模型解读
  14. android 5.0判断服务是否开启中,android5.0之后版本服务出现的显示问题解决方案
  15. android checkbox分页问题分析
  16. 在centos中运行出现错误:cannot find -lbz2
  17. 虚拟主机服务器能干嘛用,虚拟主机能拿来干什么
  18. 浙江理工大学校园网DNS性能测试脚本
  19. 唤醒词检测引擎Snowboy
  20. python破解qq密码_央·python编程之QQ数据清洗

热门文章

  1. 自动驾驶模拟工具CARLA的安装
  2. 电脑蓝屏进不了win7系统怎么解决?
  3. 使用zabbix对服务器进行性能监控
  4. colmap安装后如何使用教程
  5. v8声卡调音软件_声卡怎么调试声音好听(v8声卡怎么调试唱歌)
  6. MySQL常用存储引擎详解
  7. 如何实现docker上Swarm集群化和自动部署
  8. NFC----百度百科
  9. C语言----求从1分之1到n分之一的和
  10. Ruoyi Vue实现单表CURD