Description

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

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

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

解题报告:老套路设\(f_i\)表示gcd为i的方案数,转化为求[L/K,R/K]中互质的数对个数,答案即为\(f_1\),考虑这一题数据范围较大,且\(H-L<=10^5\),那么就需要用到结论:假设N个数不全相同,那么他们的最大公约数小于最大和最小的两个数之差,正确性显然,所以我们把状态改为:\(f_i\)表示选n个互不相同的数,gcd为i的方案数
令L=L/K,R=R/K
那么[L,R]间含i这个因子的数有(R/i)-((L-1)/i)种,所以选n个的方案数一共有\((R/i-(L-1)/i)^n\),再减去所有数都重复的\((R/i-(L-1)/i)\)种,减完之后的值设为\(tot\),然后就是推\(fi\),因为现在的方案只是包含i这个因子,而不是gcd=i的方案,所以还要减去gcd不为i的方案
综上:\(f_i=tot-\sum_{j=i*2}^{j=R-L}f_j\)

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#define RG register
#define il inline
#define iter iterator
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef long long ll;
const int N=1e5+5,mod=1000000007;
ll qm(ll x,ll k){ll sum=1;while(k){if(k&1)sum*=x,sum%=mod;x*=x;x%=mod;k>>=1;}return sum;
}
ll f[N];
void work()
{int n,L,R,K;cin>>n>>K>>L>>R;bool flg=(L<=K && K<=R);L--;L/=K;R/=K;int c=R-L;ll l,r;for(int i=c;i>=1;i--){l=L/i;r=R/i;f[i]=((qm(r-l,n)-(r-l)%mod)+mod)%mod;for(int j=2;j*i<=c;j++)f[i]-=f[j*i],f[i]=(f[i]%mod+mod)%mod;}f[1]+=flg;f[1]%=mod;printf("%lld\n",f[1]);
}int main()
{work();return 0;
}

转载于:https://www.cnblogs.com/Yuzao/p/7466706.html

bzoj 3930: [CQOI2015]选数相关推荐

  1. BZOJ 3930 [CQOI2015]选数

    题目链接 https://lydsy.com/JudgeOnline/problem.php?id=3930 题解 反演得到 ∑i=1⌊h/k⌋μ(i)(⌊hki⌋−⌊l−1ki⌋)n \sum_{i ...

  2. BZOJ3930: [CQOI2015]选数

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

  3. [CQOI2015]选数(杜教筛)

    [CQOI2015]选数 推式子 根据题意可写出式子: ∑a1=LH∑a2=LH⋯∑an=LH[gcd(a1,a2-an)=k]∑a1=⌈Lk⌉⌊Hk⌋∑a2=⌈Lk⌉⌊Hk⌋⋯∑an=⌈Lk⌉⌊Hk ...

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

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

  5. [BZOJ3930][CQOI2015]选数(数论+容斥)

    首先,进行如下处理: 1.如果 L L是KK的倍数,那么把 L L变为LK\frac{L}{K},否则变为 ⌊LK⌋+1 \lfloor\frac{L}{K}\rfloor+1. 2.把 H H变成⌊ ...

  6. [BZOJ 2734] 集合选数

    Link: BZOJ 2734 传送门 Solution: 真是奥妙重重的建模啊..... 我们发现$x,2*x,3*x$这些数太分散了,难以处理 于是我们构建这样的表格: x  3x  9x  27 ...

  7. [CQOI2015]选数(数论分块+杜教筛)

    problem 洛谷链接 solution 将 L,HL,HL,H 的范围放缩 1K\frac 1 KK1​,都除掉 KKK,特殊的 LLL 边界注意一下. H←H/K,L←(L−1)/K+1H\le ...

  8. [bzoj3930] [CQOI2015]选数

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

  9. 洛谷P3172 [CQOI2015]选数

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

最新文章

  1. Wing IDE Pro (Wing pro 6.0) for Ubuntu/linux
  2. internetreadfile读取数据长度为0_Hadoop 读取数据
  3. qt linux mac,MacOS下Qt Installer Framework使用教程【个人经验】
  4. (已解决) MySQL: ERROR 1045 (28000): Access denied for user 'xxxxx'@'localhost' (using password: NO)
  5. 根据twitter的snowflake算法生成唯一ID
  6. C_C++变量命名规则
  7. Python3——简单的TCP实例
  8. 一步步Notepad变Word
  9. Git学习总结(19)——Git代码回滚总结
  10. 写了10年Javascript未必全了解的标识符顺序
  11. 交换机的 VTP sever 与 client设置
  12. windows phone 8.0 的网络图片异步加载方案
  13. java小程序之学生信息_java小程序之学生信息录入界面
  14. m7405d粉盒清零方法_打印机清零方法总览
  15. 【181214】VC++动画翻页效果的电话簿程序源代码
  16. 用百度OCR识别URL图片中的文字
  17. leetcode 1925. Count Square Sum Triples(python)
  18. 人脸识别技术禁令再来!美国又一城市禁止面部识别软件
  19. Progress ThemeBuilder updated Crack
  20. 【学术相关】为什么鼓励你读博士?自南大毕业后,我目睹了读博的千姿百态...

热门文章

  1. java 日期for循环_java for循环的时候增加循环体的长度是不是不太好的?
  2. 16 The Terminal and Job Control
  3. TensorFlow CTC
  4. 4k笔记本安装linux,Dell 4K Linux 笔记本 M3800 发售
  5. php7.1 伪静态失效,解决CodeIgniter伪静态失效
  6. python color属性_模块“cv2.cv2”没有“COLOR”属性“BGR2GREY”
  7. Java基础学习总结(154)——Synchronized与Volatile、Synchronized与ReentrantLock概念及区别
  8. Tomcat学习总结(20)—— Tomcat启动脚本收藏
  9. 消息中间件学习总结(9)——RocketMQ与kafka差异比较分析
  10. Docker学习总结(22)——Docke run命令详解