bzoj 3930: [CQOI2015]选数
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]选数相关推荐
- BZOJ 3930 [CQOI2015]选数
题目链接 https://lydsy.com/JudgeOnline/problem.php?id=3930 题解 反演得到 ∑i=1⌊h/k⌋μ(i)(⌊hki⌋−⌊l−1ki⌋)n \sum_{i ...
- 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】[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变成⌊ ...
- [BZOJ 2734] 集合选数
Link: BZOJ 2734 传送门 Solution: 真是奥妙重重的建模啊..... 我们发现$x,2*x,3*x$这些数太分散了,难以处理 于是我们构建这样的表格: x 3x 9x 27 ...
- [CQOI2015]选数(数论分块+杜教筛)
problem 洛谷链接 solution 将 L,HL,HL,H 的范围放缩 1K\frac 1 KK1,都除掉 KKK,特殊的 LLL 边界注意一下. H←H/K,L←(L−1)/K+1H\le ...
- [bzoj3930] [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- 洛谷P3172 [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
最新文章
- Wing IDE Pro (Wing pro 6.0) for Ubuntu/linux
- internetreadfile读取数据长度为0_Hadoop 读取数据
- qt linux mac,MacOS下Qt Installer Framework使用教程【个人经验】
- (已解决) MySQL: ERROR 1045 (28000): Access denied for user 'xxxxx'@'localhost' (using password: NO)
- 根据twitter的snowflake算法生成唯一ID
- C_C++变量命名规则
- Python3——简单的TCP实例
- 一步步Notepad变Word
- Git学习总结(19)——Git代码回滚总结
- 写了10年Javascript未必全了解的标识符顺序
- 交换机的 VTP sever 与 client设置
- windows phone 8.0 的网络图片异步加载方案
- java小程序之学生信息_java小程序之学生信息录入界面
- m7405d粉盒清零方法_打印机清零方法总览
- 【181214】VC++动画翻页效果的电话簿程序源代码
- 用百度OCR识别URL图片中的文字
- leetcode 1925. Count Square Sum Triples(python)
- 人脸识别技术禁令再来!美国又一城市禁止面部识别软件
- Progress ThemeBuilder updated Crack
- 【学术相关】为什么鼓励你读博士?自南大毕业后,我目睹了读博的千姿百态...
热门文章
- java 日期for循环_java for循环的时候增加循环体的长度是不是不太好的?
- 16 The Terminal and Job Control
- TensorFlow CTC
- 4k笔记本安装linux,Dell 4K Linux 笔记本 M3800 发售
- php7.1 伪静态失效,解决CodeIgniter伪静态失效
- python color属性_模块“cv2.cv2”没有“COLOR”属性“BGR2GREY”
- Java基础学习总结(154)——Synchronized与Volatile、Synchronized与ReentrantLock概念及区别
- Tomcat学习总结(20)—— Tomcat启动脚本收藏
- 消息中间件学习总结(9)——RocketMQ与kafka差异比较分析
- Docker学习总结(22)——Docke run命令详解