[luoguP3172] [CQOI2015]选数(递推+容斥原理)
不会莫比乌斯反演,不会递推。
但是我会看题解。
先将区间[L,H]变成(L-1,H],这样方便处理
然后求这个区间内gcd为k的方案数
就是求区间((L-1)/k,H/k]中gcd为1的方案数
有个重要的性质:如果有一些不相同的数,最大的为a,最小的为b,任意选取其中的一些数,则他们的gcd<=a-b
设f[i]表示gcd为i且所选的数不相同的方案数,但是不好求,只容易求出gcd为i的倍数g[i]的方案数
考虑容斥原理,f[i] = g[i] - f[2i] - f[3i] - ……
计算g[i]的时候要把相同的数的方案数减去,因为我们有个前提,只有数都不相同时gcd的大小才能保证
倒着递推便可以省略g数组
#include <cstdio>
#define N 100001
#define p 1000000007
#define LL long long using namespace std; LL f[N];
int n, k, l, r, flag, len; inline LL ksm(LL x, int y)
{
LL ret = 1;
for(; y; y >>= 1)
{
if(y & 1) ret = ret * x % p;
x = x * x % p;
}
return ret;
} int main()
{
int i, j, x, y;
scanf("%d %d %d %d", &n, &k, &l, &r);
if(l <= k && k <= r) flag = 1;
l--, l /= k, r /= k, len = r - l;
//转变成求区间(l, r]中gcd为1的方案数
for(i = len; i >= 1; i--)
{
x = l / i, y = r / i;
f[i] = (LL)(ksm(y - x, n) - (y - x)) % p;
for(j = i + i; j <= len; j += i) f[i] = (f[i] - f[j]) % p;
}
printf("%lld\n", (f[1] + flag + p) % p);
return 0;
}
[luoguP3172] [CQOI2015]选数(递推+容斥原理)的更多相关文章
- BZOJ 3930: [CQOI2015]选数 递推
3930: [CQOI2015]选数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pro ...
- 3930: [CQOI2015]选数|递推|数论
题目让求从区间[L,H]中可反复的选出n个数使其gcd=k的方案数 转化一下也就是从区间[⌈Lk⌉,⌊Hk⌋]中可反复的选出n个数使其gcd=1的方案数 然后f[i]表示gcd=i的方案数.考虑去掉全 ...
- luoguP3172 [CQOI2015]选数
题意 所求即为: \(\sum\limits_{i_1=L}^{R}\sum\limits_{i_2=L}^{R}...\sum\limits_{i_k=L}^{R}[\gcd(i_1,i_2,... ...
- bzoj3930[CQOI2015]选数 容斥原理
3930: [CQOI2015]选数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1383 Solved: 669[Submit][Status] ...
- 洛谷 [CQOI2015]选数 解题报告
[CQOI2015]选数 题目描述 我们知道,从区间\([L,H]\)(\(L\)和\(H\)为整数)中选取\(N\)个整数,总共有\((H-L+1)^N\)种方案. 小\(z\)很好奇这样选出的数的 ...
- 【BZOJ3930】[CQOI2015]选数 莫比乌斯反演
[BZOJ3930][CQOI2015]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律 ...
- [CQOI2015]选数(莫比乌斯反演,杜教筛)
[CQOI2015]选数(luogu) Description 题目描述 我们知道,从区间 [L,H](L 和 H 为整数)中选取 N 个整数,总共有 (H-L+1)^N 种方案. 小 z 很好奇这样 ...
- 【递推】BZOJ 3930: [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- bzoj 3930: [CQOI2015]选数【递推】
妙啊 这个题一上来就想的是莫比乌斯反演: \[ f(d)=\sum_{k=1}^{\left \lceil \frac{r}{d} \right \rceil}\mu(k)(\left \lceil ...
随机推荐
- FusionCharts3.2.1 参数的详细说明和功能特性
功能特性animation 是否动画显示数据,默认为1(True)showNames 是否显示横向坐标轴(x轴)标签名称rotat ...
- MongoDB数据清理命令
#启动mongo命令/data/liudi/mongodb/bin/mongo --port 27010 #显示数据库show dbs; #使用tps_live数据库use tps_live; #显示 ...
- Sqlserver 2012 Always on技术
使用了Sqlserver 2012 Always on技术后,假如采用的配置是默认配置,会出现Primary server CPU很高的情况发生,比如默认配置如下: 需要自定义来解决这个问题. 我们先 ...
- 将从SQL2008 r2里备份的数据库还原到SQL2008中
从标题可以看出这是未解决上一篇遗留问题写的,现在我也不知道这个可不可以成功,方法似乎查到了一种,具体怎样还不清楚:而且,我想说的是“我踩雷了”. 这篇的主角是“Database Publishing ...
- sql mybatis 使用concat乱码
先贴代码,这是sql查询里面 select id,name,sex,phone,present,adder, CONCAT("从业",experience,"年" ...
- 用cssText批量修改样式
一般情况下我们用js设置元素对象的样式会使用这样的形式: var element= document.getElementById(“id”);element.style.width=”20px”;e ...
- C++11:移动构造函数的测试
C++11:移动构造函数的测试 代码如下: #include <iostream> #include <stddef.h> #include <Windows.h> ...
- haproxy文件的增删改查
在构建一个程序项目之前,首先需要设计程序的框架,从总体上构建一个项目中的一个个功能,之后对每一个功能进行补充,最终实现总体的功能. 1 程序的总体框架: 首先把所有的功能设计成相应的函数,用pass来 ...
- Codeforces Round #272 (Div. 2)-C. Dreamoon and Sums
http://codeforces.com/contest/476/problem/C C. Dreamoon and Sums time limit per test 1.5 seconds mem ...
- java中regex参考
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu ...