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

样例解释

所有可能的选择方案:(2, 2), (2, 3), (2, 4), (3, 2), (3, 3), (3, 4), (4, 2), (4, 3), (4, 4)

其中最大公约数等于2的只有3组:(2, 2), (2, 4), (4, 2)

对于100%的数据,1≤N,K≤109,1≤L≤H≤109,H-L≤10^5

Sol

首先最重要的条件:\(H-L\)在\(10^5\)以内,这说明区间内\(gcd(i,j)<10^5\),那么我们可以直接枚举gcd是多少,然后进行计算。

具体地,我们把H和L都/=K,这样所求变成了\(gcd(a_1,a_2,...,a_n)=1\)的方案数。

我们设\(f[i]\)表示区间内\(gcd\)为i的方案数,那么\(f[i]\)可以再次通过除以\(i\)然后直接求区间长度的方式解决,但是这样我们会把\(\sum_{i|d}f[d]\)也算上,所以需要把i倍数的d减掉,倒推即可。

本题的三个小细节:

  1. 如果K在L和R的范围内,那么ans++。
  2. 如果\(L\%K\)不等于0,那么新的L等于\(L/K+1\),因为原来的L往后一小部分是不合法的,要去掉,内层统计时亦是如此。
  3. 要减去N个数都相同的方案,因为显然这种方案不成立,具体地,快速幂后面减个len就行。

时间复杂度\(O(nlogn)\)。

Code

#include <cstdio>
int N,K,L,R,l,r,M,m,F,f[100005],P=1e9+7;
int ksm(int a,int b){int res=1;for(;b;b>>=1,a=1ll*a*a%P) if(b&1) res=1ll*res*a%P;return res;}
int main()
{
scanf("%d%d%d%d",&N,&K,&L,&R);
if(L<=K&&K<=R) F++;
L=L%K?L/K+1:L/K,R/=K,M=R-L+1;
for(int i=M;i;i--)
{
l=L%i?L/i+1:L/i,r=R/i,m=r-l+1;
if(l<r){f[i]=(ksm(m,N)-m+P)%P;for(int j=(i<<1);j<=M;j+=i) f[i]=(f[i]-f[j]+P)%P;}
}
printf("%d\n",(F+f[1])%P);
}

【bzoj3930】选数 容斥原理+暴力的更多相关文章

  1. bzoj3930[CQOI2015]选数 容斥原理

    3930: [CQOI2015]选数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1383  Solved: 669[Submit][Status] ...

  2. NOIP 2002提高组 选数 dfs/暴力

    1008 选数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知 n 个整数 x1,x2,…, ...

  3. [CQOI2015][bzoj3930] 选数 [杜教筛+莫比乌斯反演]

    题面: 传送门 思路: 首先我们把区间缩小到$\left[\lfloor\frac{L-1}{K}\rfloor,\lfloor\frac{R}{K}\rfloor\right]$ 这道题的最特殊的点 ...

  4. BZOJ3930: [CQOI2015]选数

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3930 容斥原理. 令l=(L-1)/k,r=R/k,这样找k的倍数就相当于找1的倍数. 设F[ ...

  5. 【BZOJ3930】选数(莫比乌斯反演,杜教筛)

    [BZOJ3930]选数(莫比乌斯反演,杜教筛) 题面 给定\(n,K,L,R\) 问从\(L-R\)中选出\(n\)个数,使得他们\(gcd=K\)的方案数 题解 这样想,既然\(gcd=K\),首 ...

  6. 【BZOJ3930】选数

    [BZOJ3930]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选 ...

  7. 【BZOJ3930】[CQOI2015]选数 莫比乌斯反演

    [BZOJ3930][CQOI2015]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律 ...

  8. luoguP1036 选数 暴力AC题解

    luoguP1036 选数 暴力AC题解(非正解) 俗话说得好:暴力出奇迹,打表拿省一. 对于一些暴力就能拿分的题,暴力就好啦QWQ 题目描述   输入格式 输出格式 输入输出样例 定义变量 我们令输 ...

  9. 洛谷 [CQOI2015]选数 解题报告

    [CQOI2015]选数 题目描述 我们知道,从区间\([L,H]\)(\(L\)和\(H\)为整数)中选取\(N\)个整数,总共有\((H-L+1)^N\)种方案. 小\(z\)很好奇这样选出的数的 ...

随机推荐

  1. java成神之——集合框架之Maps,Hashtable

    集合 Maps HashMap 创建和初始化map 遍历方式 LinkedHashMap WeakHashMap TreeMap 线程锁 Hashtable 结语 集合 Maps HashMap Ma ...

  2. 微信小程序之wx.getLocation再次授权问题解决

    首先,在page外定义一个公共函数用于发送获取位置的请求 var getLocation = function (that) { wx.getLocation({ type: 'wgs84', suc ...

  3. Python函数的初识

    一   什么是函数 定义: 定义一个事情或者功能,等到需要用的时候直接用就可以了,那么这个定义的就是一个函数 函数  :  对代码块和功能的封装和定义 函数定义的格式:     def   函数名() ...

  4. Vue 简单的总结一

    let 变量 1. 局部作用域 2. 不会存在变量提升 3. 变量不能重复声明 const 变量 1. 局部作用域 2. 不会存在变量提升 3. 变量不能重复声明 4. 只能声明常量,不可变得量 th ...

  5. krpano之背景音乐

    步骤: 1.添加音乐控制插件 <!-- START:音乐控制 --> <plugin name="soundinterface" url="%SWFPA ...

  6. DDD学习笔录——提炼问题域之有效提炼知识的模型(三)

    方式六:延迟对模型中概念的命名 对领域建模时命名很重要. 因为在不断的知识提炼过程中经常会发现已经被命名的概念与你最初理解的有出入,这时你当初的命名就会变成一个问题.其问题在于  最初选作名称的这个词 ...

  7. ResponseUtil

    package util; import java.io.OutputStream; import java.io.PrintWriter; import javax.servlet.http.Htt ...

  8. 循序渐进Python3(十一) --4--  web之jQuery

      jQuery         jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设 ...

  9. Java,Calendar -- 获取当前日期、当月月初日期、月末日期

    public class CalendarTest { public static void main(String[] args) { // 获取当前年份.月份.日期 Calendar cale = ...

  10. CSS文本溢出处理

    1.超出层的高度和宽度时文本自动隐藏 overflow:hidden;text-overflow:ellipsis; 2.超出层的宽度时隐藏溢出的文本以...表示,Firefox不兼容,只隐藏溢出的文 ...