bzoj3930【CQOI2015】选数
3930: [CQOI2015]选数
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 742 Solved: 376
[ Submit][ Status][ Discuss]
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
样例解释
递推,我好蠢...
注意题目中H-L≤10^5这个条件,如果N个数不全相同,那么他们的最大公约数小于等于N个数的极差。
因此我们可以先计算出N个数不全相同的方案数,再特判一下全相同的情况,就可以得到答案。
计算N各数不全相同,且最大公约数等于K的方案数,我们可以将L除以K上取整,H除以K下取整,问题转化为新的区间内最大公约数等于1的方案数。
设f[i]表示最大公约数为i的方案数,f[i]=t^n-t-∑(i|j)f[j],其中t=H-L+1。然后枚举i,利用容斥原理暴力计算。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define maxn 100005
#define mod 1000000007
using namespace std;
int n,k,l,r,len;
ll f[maxn];
inline int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
inline ll getpow(ll x,ll y)
{ll ret=1;for(;y;y>>=1,x=x*x%mod) if (y&1) ret=ret*x%mod;return ret;
}
int main()
{freopen("number.in","r",stdin);freopen("number.out","w",stdout);n=read();k=read();l=read();r=read();l=(l-1)/k+1;r=r/k;len=r-l+1;D(i,len,1){ll tmp=r/i-(l-1)/i;if (!tmp) continue;f[i]=((getpow(tmp,n)-tmp)%mod+mod)%mod;F(j,2,len/i) f[i]=((f[i]-f[j*i])%mod+mod)%mod;}if (l<=1&&r>=1) f[1]=(f[1]+1)%mod;printf("%lld\n",f[1]);
}
bzoj3930【CQOI2015】选数相关推荐
- BZOJ3930: [CQOI2015]选数
BZOJ3930: [CQOI2015]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案. 小z很好奇这样选出的数的最大公约数的规 ...
- [BZOJ3930][CQOI2015]选数(数论+容斥)
首先,进行如下处理: 1.如果 L L是KK的倍数,那么把 L L变为LK\frac{L}{K},否则变为 ⌊LK⌋+1 \lfloor\frac{L}{K}\rfloor+1. 2.把 H H变成⌊ ...
- [bzoj3930] [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- 【BZOJ3930】[CQOI2015]选数 莫比乌斯反演
[BZOJ3930][CQOI2015]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律 ...
- [CQOI2015]选数(杜教筛)
[CQOI2015]选数 推式子 根据题意可写出式子: ∑a1=LH∑a2=LH⋯∑an=LH[gcd(a1,a2-an)=k]∑a1=⌈Lk⌉⌊Hk⌋∑a2=⌈Lk⌉⌊Hk⌋⋯∑an=⌈Lk⌉⌊Hk ...
- 【BZOJ3930】选数(莫比乌斯反演倍数形式,杜教筛)
[BZOJ3930]选数 https://www.cnblogs.com/cjyyb/p/8303813.html
- 【反演复习计划】【COGS2433】【bzoj3930,CQOI2015选数】爱蜜莉雅的冰魔法
同bzoj3930. (日常盗题图) #include<bits/stdc++.h> #define N 1000010 #define yql 1000000007 #define ll ...
- bzoj 3930: [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- [CQOI2015]选数(数论分块+杜教筛)
problem 洛谷链接 solution 将 L,HL,HL,H 的范围放缩 1K\frac 1 KK1,都除掉 KKK,特殊的 LLL 边界注意一下. H←H/K,L←(L−1)/K+1H\le ...
- 洛谷P3172 [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
最新文章
- 不同数据类型的处理函数(一)
- java怎么删除List中的指定元素
- vbyone接口引脚定义_FMC接口介绍
- Cauchy-Schwarz不等式
- 【Linux】快速入门法宝~你值得拥有
- 匿名留言板表白墙 小程序校园树洞带后台
- 【Azure Data Platform】ETL工具(8)——ADF 数据集和链接服务
- python基础-异常处理try-except
- 2022Android笔试真题,20道高频面试题(含答案)
- 《动手学深度学习》报错 解决方案RuntimeError: DataLoader worker (pid(s) ...) exited unexpectedly
- u盘启动 联想一体机_联想一体机如何进入bios设置u盘启动_联想一体机设置U盘启动步骤...
- 北京市新型冠状病毒疫情区域图
- matlab画出拟合的曲线,matlab画出拟合曲线
- PHP面向对象-多态
- 手动删除oem 13c EM REPOSITORY 数据库
- 20221015 动量矩定理
- uniapp页面不能触发onReachBottom事件
- Composer的实用部分
- vr计算机组装,VR轻松实现在家学习装配技术!
- RS485串口|433无线|LORA模块|自组网模块|RS485信号无线通讯|无线485传输模块
热门文章
- C语言-递归解决分鱼问题。
- 【知识整理】安卓(Android)应用上传360应用市场步骤详解
- Attempting to capture an EagerTensor without building a function
- 【20211123】【Python】修改list/array中的某些数值时,报错TypeError: can only assign an iterable,原因分析及正确的操作方式
- 国产BI软件报表分享:财务数据分析三张表
- Echarts柱状图设置渐变色
- 转:人到中年须具备的心情修养
- Python【小游戏合集】之自行开发一个猜数字游戏~
- zigbee CC2530 系列教程 7 串口数据收发实验
- 蓝宝石b75主板支持服务器内存,入门主板新标杆 蓝宝石冰晶B75全解析