这道题自然是可以反演的

按照反演的套路我们先设出两个函数

\(F(n)\)表示从\([L,H]\)中任选\(N\)个数的最大公约数是\(n\)或者\(n\)的倍数的情况数

\(f(n)\)表示从\([L,H]\)中任选\(N\)个数的最大公约数是\(n\)的情况数

非常显然的是

\[F(n)=\sum_{n|d}f(d)
\]

\[f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d)
\]

开始反演了

首先我们发现我们求\(f(k)\)并不好求,因为没有办法整除分块

所一我们把\(L/k,H/k\)之后求\(f(1)\)就好了

吗?

显然并不行啊

我们考虑一下如果\(L\%k!=0\),\(\left \lfloor \frac{L}{k} \right \rfloor\times k<L\),就会使一些不在\([L,H]\)内的数混进答案里了

所以如果\(L\%k!=0\)的话,除以\(k\)之后再将\(L+1\)

之后就是如何表示\(F\)了

非常显然就是

\[F(n)=(\left \lfloor \frac{H}{n}\right \rfloor-\left \lfloor \frac{L-1}{n}\right \rfloor)^N
\]

\[f(1)=\sum_{i=1}\mu(i)F(i)
\]

把\(F(i)\)相等的用整除分块处理

但是这道题的\(H\)非常大,甚至都不能线筛

不能线筛杜教筛总可以了吧,于是就可以用\(O(H^{\frac{2}{3}})\)的复杂度解决这道题

#include<iostream>
#include<cstring>
#include<cstdio>
#include<tr1/unordered_map>
#define re register
#define maxn 5000001
#define LL long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
const int mod=1000000007;
using namespace std::tr1;
unordered_map<int,int> ma;
int p[maxn>>1],f[maxn],mu[maxn];
inline LL quick(int a,int b)
{
LL S=1;
while(b) {if(b&1) S=S*a%mod;b>>=1;a=(LL)a*(LL)a%mod;}
return S;
}
int N,K,L,H,M;
int solve(int x)
{
if(x<=M) return mu[x];
if(ma.find(x)!=ma.end()) return ma[x];
int ans=1;
for(re int l=2,r;l<=x;l=r+1)
{
r=x/(x/l);
ans-=solve(x/l)*(r-l+1);
}
return ma[x]=ans;
}
int main()
{
scanf("%d%d%d%d",&N,&K,&L,&H);
H/=K;
if(L%K==0) L=L/K;
else L=L/K+1;
M=min(H,5000000);
mu[1]=f[1]=1;
for(re int i=2;i<=M;i++)
{
if(!f[i]) p[++p[0]]=i,mu[i]=-1;
for(re int j=1;j<=p[0]&&p[j]*i<=M;j++)
{
f[p[j]*i]=1;
if(i%p[j]==0) break;
mu[i*p[j]]=-1*mu[i];
}
}
for(re int i=1;i<=M;i++) mu[i]+=mu[i-1];
LL ans=0;L--;
for(re int l=1,r;l<=H;l=r+1)
{
if(!(L/l)) r=H/(H/l);
else r=min(H/(H/l),L/(L/l));
ans=(ans+quick(H/l-L/l,N)*(LL)(solve(r)-solve(l-1))%mod)%mod;
}
printf("%lld\n",((ans%mod)+mod)%mod);
return 0;
}

【[CQOI2015]选数】的更多相关文章

  1. BZOJ 3930: [CQOI2015]选数 递推

    3930: [CQOI2015]选数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pro ...

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

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

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

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

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

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

  5. [CQOI2015]选数(莫比乌斯反演,杜教筛)

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

  6. BZOJ3930: [CQOI2015]选数

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

  7. 【刷题】BZOJ 3930 [CQOI2015]选数

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

  8. 【BZOJ】3930: [CQOI2015]选数

    题意 从区间\([L, R]\)选\(N\)个数(可以重复),问这\(N\)个数的最大公约数是\(K\)的方案数.(\(1 \le N, K \le 10^9, 1 \le L \le R \le 1 ...

  9. CQOI2015 选数

    题目 从\([L, H]\)(\(H-L\leq 10^5\))选出\(n\)个整数,使得这些数的最大公约数为\(k\)的方案数. 算法 首先有一个很简单的转化,原问题可以简化为: 从\([\lcei ...

  10. bzoj 3930: [CQOI2015]选数

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

随机推荐

  1. C# 字符串处理—— 去除首位保留其他

    //去除首位 public static string RemoveFirstPlace(string s) { ) //输入空值直接Return { ")) //判断开头是否是零 s = ...

  2. I/O处理小练习--保存用户账号密码

    I/O处理小练习--保存用户账号密码 用户输入姓名和密码,将每一个姓名和密码保存到文件中,输入done时程序结束 import java.io.*; public class Example { pu ...

  3. 在IIS中部署好WCF服务站点后,本机访问服务无问题,局域网中其他电脑访问不到

    1.问题描述 在IIS中部署好WCF服务站点后,本机访问服务无问题,局域网中其他电脑访问不到. 2.解决方法 (1)控制面板 -> Windows防火墙 -> 高级设置 (2)属性 (3) ...

  4. stm32f10x单片机进阶--spi使用

      使用SPI与外部flash(MX25L6406EM21)IC通信 连接方式                    如上图所示,MCU通过SPI2与外部flash芯片进行相连接. MCU spi2初 ...

  5. 1142 奖学金 sort做法

    个人博客:doubleq.win 1142 奖学金 2007年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解       题目 ...

  6. Myeclipse下集成SVN插件

    一.下载SVN插件subclipse   下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240   在 ...

  7. 单选按钮(RadioButton)

    一:RadioButton的相关属性: 1.Activity //单选按钮 public class RadioButtonActivity extends Activity { private Co ...

  8. Mac系统查看端口占用和杀死进程

    查看进程占用 lsof -i tcp:8080 该命令会显示占用8080端口的进程,有其 pid ,可以通过pid关掉该进程 杀死进程 kill pid 例如 kill 39394 转自:https: ...

  9. 用jsp实现网站登录界面的制作,并连接数据库

    课堂测试 任务需求: 撰写一篇博客 需要网站系统开发需要掌握的技术: 本次课堂测试的源程序代码: 运行结果截图: 说明课堂测试未按时完成的原因. 列出你对这门课的希望和自己的目标,并具体列出你计划每周 ...

  10. course & time