Description

我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案。小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一步研究。然而他很快发现工作量太大了,于是向你寻求帮助。你的任务很简单,小z会告诉你一个整数K,你需要回答他最大公约数刚好为K的选取方案有多少个。由于方案数较大,你只需要输出其除以1000000007的余数即可。

Input

输入一行,包含4个空格分开的正整数,依次为N,K,L和H。

Output

输出一个整数,为所求方案数。

Sample Input

2 2 2 4

Sample Output

3

HINT

1<=N,K<=10^9

1<=L<=R<=10^9

H-L<=10^5

题解:

听说这是正经的题解。。。

然而这个高端解法并没有用到题目中“H-L<=10^5”的条件,而利用这个条件,我们可以想出一个时间和代码复杂度都非常优秀的算(shui)法:(主要是因为我不会杜教筛)

先证明一个结论:选出的数的最大公约数肯定比选出的数中最大值和最小值的差小;

证明很容易,设最大公约数为$d$,最大值为$dk_1$,最小值为$dk_2$,那么$$max-min=dk_1-dk_2=d(k_1-k_2)>d$$

题目非常良心的给出$H-L\leq 10^5$,即$d<10^5$,因此就可以枚举$d$,然后容斥判重即可。

容斥:$f_i=sum-\sum\limits_{i|j}f_j$

注意$k$在区间$[L,H]$中时要判断选出的数全相同的情况!

代码实测4ms,写了杜教筛的学长跑了130多ms……

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define mod 1000000007
using namespace std;
typedef long long ll;
ll n,k,l,h,s,f[],ans=;
ll fastpow(ll x,ll y){
ll ret=;
for(;y;y>>=,x=x*x%mod){
if(y&)ret=ret*x%mod;
}
return ret;
}
int main(){
scanf("%lld%lld%lld%lld",&n,&k,&l,&h);
if(l<=k&&k<=h)ans++;
l=(l-)/k;
h/=k;
s=h-l;
for(int i=s;i>=;i--){
ll L=l/i,R=h/i,ss=R-L;
if(ss>){
f[i]=(fastpow(ss,n)-ss+mod)%mod;
for(int j=i*;j<=s;j+=i)f[i]=(f[i]-f[j]+mod)%mod;
}
}
printf("%lld",f[]+ans);
return ;
}

最新文章

  1. HashMap两种遍历方式的深入研究
  2. 关于UIScrollerView的基本用法和代理
  3. MongoDB学习笔记—权限管理
  4. asp.net中membership使用oracle数据库(二)
  5. MySQL中的两种临时表
  6. C++ 函数返回数组指针的问题
  7. HDU 1532 最大流模板题
  8. 【Unity3D游戏开发】性能优化之spine提高80~90%的效率 (三一)
  9. SharePoint 2010 master page 控件介绍(3) :页面主体内容
  10. 查询可用的Nuget服务地址
  11. 激光推送SSL问题
  12. mysql忘记密码的处理方式(整理非原创)
  13. SQLServer 2008 R2 清空日志文件
  14. phpcmsv9更改fckeditor编者ueditor编辑
  15. python的xlwt模块的常用方法
  16. 【转】How to append current date and timestamp to filename in shell script
  17. SA 后缀数组
  18. linux下播放组播流出现setsockopt:No such device错误
  19. Effective Java 第三版——64. 通过对象的接口引用对象
  20. UVALive 4850 Installations 贪心

热门文章

  1. uva 11624 Fire! 【 BFS 】
  2. Prime Distance POJ - 2689 线性筛
  3. 《Exception》第八次团队作业:Alpha冲刺(大结局)
  4. webpack初识(biaoyansu)
  5. HDU 4458 Shoot the Airplane( 判断点在多边形内外 )
  6. a标签设置高度不生效问题
  7. (转载)使用Maven构建多模块项目
  8. java中BufferedReader 有什么用
  9. 【codeforces 190C】STL
  10. linux openssl加密文件