【BZOJ3930】[CQOI2015]选数 莫比乌斯反演
【BZOJ3930】[CQOI2015]选数
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
Sample Output
HINT
样例解释
题解:先令l=(L-1)/K+1,r=(H-1)/K+1,于是所求变成了:

然后用杜教筛,注意l<d的情况
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#define mod 1000000007
using namespace std;
const int m=1000000;
typedef long long ll;
map<ll,ll> mp;
int num;
int mu[m+10],pri[m/10];
bool np[m+10];
ll sm[m+10];
ll pm(ll x,ll y)
{
ll z=1;
while(y)
{
if(y&1) z=z*x%mod;
x=x*x%mod,y>>=1;
}
return z;
}
ll getsm(ll x)
{
if(x<=m) return sm[x];
if(mp.find(x)!=mp.end()) return mp[x];
ll ret=1,i,last;
for(i=2;i<=x;i=last+1)
{
last=x/(x/i);
ret=(ret-(last-i+1)*getsm(x/i)+mod)%mod;
}
mp[x]=ret;
return ret;
}
int main()
{
ll i,j,last,ans=0;
ll N,K,L,H;
sm[1]=mu[1]=1;
for(i=2;i<=m;i++)
{
if(!np[i]) pri[++num]=i,mu[i]=-1;
sm[i]=sm[i-1]+mu[i];
for(j=1;j<=num&&i*pri[j]<=m;j++)
{
np[i*pri[j]]=1;
if(i%pri[j]==0)
{
mu[i*pri[j]]=0;
break;
}
mu[i*pri[j]]=-mu[i];
}
}
scanf("%lld%lld%lld%lld",&N,&K,&L,&H),L=(L-1)/K,H=H/K;
for(i=1;i<=H;i=last+1)
{
if(i<=L) last=min(L/(L/i),H/(H/i));
else last=H/(H/i);
ans=(ans+(getsm(last)-getsm(i-1)+mod)*pm((H/i-L/i),N))%mod;
}
printf("%lld",ans);
return 0;
}
【BZOJ3930】[CQOI2015]选数 莫比乌斯反演的更多相关文章
- 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛
题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...
- BZOJ 3930: [CQOI2015]选数 莫比乌斯反演
https://www.lydsy.com/JudgeOnline/problem.php?id=3930 https://blog.csdn.net/ws_yzy/article/details/5 ...
- luogu3172 [CQOI2015]选数 莫比乌斯反演+杜教筛
link 题目大意:有N个数,每个数都在区间[L,H]之间,请求出所有数的gcd恰好为K的方案数 推式子 首先可以把[L,H]之间的数字gcd恰好为K转化为[(L-1)/K+1,H/K]之间数字gcd ...
- BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛
求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$ $\Rightarrow \sum_{i=\frac{L}{k}}^{\fra ...
- [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)
[BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...
- bzoj3930[CQOI2015]选数 容斥原理
3930: [CQOI2015]选数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1383 Solved: 669[Submit][Status] ...
- BZOJ3930 [CQOI2015]选数 【容斥】
题目 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一步研 ...
- BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演)
手动博客搬家:本文发表于20180310 11:46:11, 原地址https://blog.csdn.net/suncongbo/article/details/79506484 题目链接: (Lu ...
- BZOJ3930: [CQOI2015]选数
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3930 容斥原理. 令l=(L-1)/k,r=R/k,这样找k的倍数就相当于找1的倍数. 设F[ ...
随机推荐
- grid 布局 设置行列间距
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- Vue 常用属性汇总
1.Vue实例常用属性 (1)数据 data:Vue 实例的数据对象 components:Vue实例配置局部注册组件 (2)类方法computed:计算属性 watch:侦听属性 filters:过 ...
- hdu - 4782 - Beautiful Soup(模拟)
题意:输出一堆乱排版的html标签,去多余空字符,转换为按缩进输出. 题目链接:pid=4782">http://acm.hdu.edu.cn/showproblem.php?pid= ...
- STL源码剖析(空间配置器)
前言 在STL中,容器的定义中都带一个模板参数,如vector template <class T, class Alloc = alloc> class vector {...} 其中第 ...
- 2014哈商大ICPC/ACM校赛解题报告
被debug邀请去參加校赛,哎,被虐..我对不起工大.. 由于本人不搞ACM,算法处于HelloWorld水准.. 虽然题目除了鸟不拉屎星人之外都非常水,但我能做到这个程度,全然是超水平发挥了.. 数 ...
- svn上检出的项目在myeclipse中报错的解决
项目本身应该是没问题的,应该是验证方面导致的错误的报错,取消验证即可:右键项目,如下操作: 除此之外,还应考虑是否环境问题引起的报错,比如:项目jar包是否发布,jdk的版本,tomcat的版本,等等
- MATLAB 的通用命令
MATLAB 的通用命令 1.MATLAB 的标点符号及其特殊功能. 2.MATLAB 的键盘按键及其特殊功能. ↑或者Ctrl+p:调用上一次的命令 ↓或者Ctrl+n:调用下一行的命令 ←或者Ct ...
- 深入理解Tomcat虚拟文件夹
我们知道,Web站点中的内容(包含网页,图片,音频文件等)一般都存放在App的文件夹下.但随着站点内容的不断丰富,用户须要把不同层次的内容组织成站点的子文件夹. 我们通常的做法是在站点主文件夹 ...
- Android - 返回上一个界面finish()方法
返回上一个界面finish()方法 本文地址: http://blog.csdn.net/caroline_wendy Android能够使用finish()方法,实现函数返回的功能.当不是Activ ...
- IOC容器Autofac
//类ContainerBuilder中的方法: RegisterType<T>()//注册类型T AsImplementedInterfaces()//表示注册的类型,以接口的方式注册 ...