考虑枚举$k$的倍数$dk$,容易知道$\left \lceil \frac{L}{K} \right \rceil\leq d\leq \left \lfloor \frac{H}{k} \right \rfloor$

我们设全部$n$个数含有公因子$dk$且全部数互不相同的方案数是$f(d)$,记$x = (\left \lceil \frac{L}{K} \right \rceil - \left \lfloor \frac{H}{k} \right \rfloor + 1)$

    那么$f(d) = (x^{n} - x)$

但是这样不是完全对的,因为这样子相当于把最大公因数是$2k,3k...$的情况也考虑进去了,我们最后还要容斥掉$f(2) f(3)...$这些数

其实就是一个莫比乌斯函数啦……线性筛一波

答案$ans = \sum_{i = 1}^{x - 1}f_{i} * \mu _{i}$

最后注意当$\left \lceil \frac{L}{K} \right \rceil$为$1$的时候,全部都选1也是一种可行的方案。

时间复杂度$O(nlogn)$

Code:

#include <cstdio>
using namespace std;
typedef long long ll; const int N = 1e5 + ;
const ll P = 1e9 + ; int n, ln, rn, k, pCnt = , pri[N];
ll mu[N], f[N];
bool np[N]; inline ll pow(ll x, ll y) {
ll res = ;
for(; y > ; y >>= ) {
if(y & ) res = res * x % P;
x = x * x % P;
}
return res;
} inline void sieve() {
mu[] = 1LL;
for(int i = ; i <= rn - ln; i++) {
if(!np[i]) {
mu[i] = -1LL;
pri[++pCnt] = i;
}
for(int j = ; j <= pCnt && pri[j] * i <= rn - ln; j++) {
np[i * pri[j]] = ;
if(i % pri[j] == ) break;
else mu[i * pri[j]] = -mu[i];
}
}
} int main() {
scanf("%d%d%d%d", &n, &k, &ln, &rn); /* if(ln % k) ln = ln / k + 1;
else ln /= k; */
ln = (ln + k - ) / k, rn /= k;
if(ln > rn) return puts(""), ; sieve(); for(int i = ; i <= rn - ln; i++) {
int l = ln, r = rn;
/* if(l % i) l = l / i + 1;
else l /= i; */
l = (l + i - ) / i, r /= i;
if(l > r) continue;
f[i] = (pow(r - l + , n) - (r - l + ) + P) % P;
} ll ans = ;
for(int i = ; i <= rn - ln; i++)
ans = (ans + f[i] * mu[i] % P + P) % P;
if(ln == ) ans = (ans + 1LL) % P;
printf("%lld\n", ans);
return ;
}

Luogu 3172 [CQOI2015]选数的更多相关文章

  1. luogu P3172 [CQOI2015]选数

    传送门 颓了一小时柿子orz 首先题目要求的是\[\sum_{x_1=l}^{r}\sum_{x_2=l}^{r}...\sum_{x_n=l}^{r}[gcd(x_1,x_2...x_n)=k]\] ...

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

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

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

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

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

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

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

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

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

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

  7. BZOJ3930: [CQOI2015]选数

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

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

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

  9. P3172 [CQOI2015]选数(莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P3172 [题解] https://www.luogu.org/blog/user29936/solutio ...

随机推荐

  1. python3的map(),filter()和reduce()函数总结

    这三个都是内置的常用高阶函数(Higher-order function),用法如下: map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把 ...

  2. NOIP模拟题 栅栏

    题目大意 给定一个$n\times m$的网格图,每次会选择一块矩形沿着网格线铺上栅栏,或者拆除之前铺的栅栏,或者询问两个格子能否不经过栅栏直接到达. 保证栅栏没有重叠或交叉,删去的栅栏删除前一定存在 ...

  3. 普通平衡树 - Treap

    怕被学弟怼 : "你的博客上没有Treap模板啊?" #include <cstdio> #include <cstring> #include <a ...

  4. an easy problem(贪心)

    An Easy Problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8333   Accepted: 4986 D ...

  5. Phong光照模型的Shader实现

    计算反射向量 Phong用到的是反射向量,计算反射向量的公式是 R = 2*N(dot(N, L)) - L 这个公式是根据向量的投影公式以及平行四边形法则推导出来的 详细步骤请看这篇文章,讲的非常好 ...

  6. Java代码使用正则验证和常用工具方法

    1.正则验证邮箱 public static boolean checkEmail(String email){ boolean flag = false; try{ String check = & ...

  7. SQL Server 学习系列之六

    SQL Server 学习系列之六 SQL Server 学习系列之一(薪酬方案+基础) SQL Server 学习系列之二(日期格式问题) SQL Server 学习系列之三(SQL 关键字) SQ ...

  8. 前用户sudo免密码

      Ubuntu 设置当前用户sudo免密码 方法1 # 备份 /etc/sudoers sudo cp /etc/sudoers . #打开 /etc/sudoers sudo visudo # 在 ...

  9. java代码。继承。。。很戳我的心啊。。不太懂。super的真正用法

    总结: package com.addd; //构造方法不能被继承,只能是调用 //属性不能被继承,方法可以 //关于继承练习啊 class fjdsk { String name; int age; ...

  10. java代码字符字节流

    总结: package com.aini; import java.io.IOException; import java.io.InputStreamReader; //流类 import java ...