#快速幂,eratosthenes筛#bzoj 3930 洛谷 3172 选数
题目
从区间 [ 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=2xdp[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 选数相关推荐
- 洛谷P1036选数(素数+组合数)
题目链接:https://www.luogu.org/problemnew/show/P1036 主要考两个知识点:判断一个数是否为素数.从n个数中选出m个数的组合 判断一个数是否为素数: 素数一定是 ...
- 洛谷 P1036 选数
P1036 选数 题目描述 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别 ...
- 【洛谷】选数---深度优先搜索+单调不降去重
题目描述 传送门:https://www.luogu.com.cn/problem/P1036 已知n个整数x1,x2-xn,以及一个整数k(k<n).从n个数字中任选k个数字相加,可分别得到一 ...
- 洛谷 - P1036 选数(递归)
题目链接:点击查看 题目大意:给出n个数,我们需要从中选k个作为一个新的集合,问新集合的权值和有多少是素数 题目分析:这个题目考考察了两点: 判断素数 设计递归 为什么把判断素数单独列出来了呢?因为一 ...
- 洛谷P1036选数题解--zhengjun
题目描述 已知 nnn 个整数 x1,x2,-,xnx_1,x_2,-,x_nx1,x2,-,xn,以及111 个整数 kkk (k<nk<nk<n).从 nnn 个整数中任选 ...
- 信息学奥赛一本通 1321:【例6.3】删数问题(Noip1994) | 洛谷 P1106 删数问题
[题目链接] ybt 1321:[例6.3]删数问题(Noip1994) 洛谷 P1106 删数问题 [题目考点] 1. 贪心 [解题思路] 解法1:每次找k+1个数中的最小值 假设我们从左向右扫描每 ...
- 洛谷省选斗兽场全通关祭~以及之后的打算!
18/5/2:洛谷省选斗兽场全通关祭! 洛谷也算是坚持了下去,到现在为止已经是有244道题AC了. 虽然我各大oj的刷题量加在一起也没有大佬的十分之一,我的智商也不及大佬的百分之一,但是相信智商刷也是 ...
- #莫比乌斯反演#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 ...
- BZOJ 4385 洛谷3594 POI2015 WIL-Wilcze doły
[题解] 手残写错调了好久QAQ...... 洛谷的数据似乎比较水.. n个正整数!!这很重要 这道题是个类似two pointer的思想,外加一个单调队列维护当前区间内长度为d的子序列中元素之和的最 ...
最新文章
- 网络空间安全之信息追踪——学习笔记 利用门户网站,综合信息追踪
- XAMPP环境下配置Phalcon框架
- mysql存储过程queue_mysql – 在Sequelize中调用输入/输出类型存储过程
- 世界上没有后悔药,时间匆匆,从关注它们开始......
- java 工作6年 面试_为什么不想搞Java了,6年经验去面试5分钟结束,现在Java面试为何这么难...
- struct.error: cannot convert argument to integer解决办法
- Linux软件间的依赖关系(转)
- IDEA报错:java: Compilation failed: internal java compiler error
- python删除过期文件_python 删除过期文件的方法+源码
- WinHex18.4算法分析
- mini聊天室(Linux下基于UDP实现的群聊系统)
- 计算机做无线AP共享文件,Windows 7妙用 笔记本变无线AP轻松共享
- obj类型的3d人体模型解读
- android 5.0判断服务是否开启中,android5.0之后版本服务出现的显示问题解决方案
- android checkbox分页问题分析
- 在centos中运行出现错误:cannot find -lbz2
- 虚拟主机服务器能干嘛用,虚拟主机能拿来干什么
- 浙江理工大学校园网DNS性能测试脚本
- 唤醒词检测引擎Snowboy
- python破解qq密码_央·python编程之QQ数据清洗