考虑枚举$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. Linux-软件安装管理

    1.软件包分类 源码包:脚本安装包 二进制包:RPM包.系统默认包 2.rpm命令管理 @rmp包在系统光盘中 mkdir /mnt/cdrom mount /dev/sr0 /mnt/cdrom c ...

  2. BEC listen and translation exercise 6

    能听懂自己的录音,说明发音还行,可惜听不懂... Another problem is that the members of the Biramichi fishing cooperative ar ...

  3. uva1605 - Building for UN(构造法)

    这道题构造出的结果很妙,考察思维能力.就两层,每层都n*n个格子,第一层第i行都放国家i,第二层第j列都放国家j. 需要注意的是ASCII中A至Z在a至z的前面(数字小),而且它们两组不挨着.所以需要 ...

  4. file_put_contents();

    file_put_contents(); 用于获取文件中的内容,可以填写网址,但是需要以http://开头

  5. UVA 11605 Lights inside a 3d Grid

    #include <iostream> #include <stdio.h> #include <cstring> #include <math.h> ...

  6. MySql数据库约束

    <MySQL技术内幕:InnoDB存储引擎>本书从源代码的角度深度解析了InnoDB的体系结构.实现原理.工作机制,并给出了大量实践,本着将书读薄的思想,循序渐进的记录对本书学习的读书笔记 ...

  7. LeetCode Reverse String II

    原题链接在这里:https://leetcode.com/problems/reverse-string-ii/#/description 题目: Given a string and an inte ...

  8. Monkey测试与MonkeyRunnner测试的区别

    1.Monkey测试  == 压力测试: MonkeyRunner == 自动化测试 2.Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件 3.MonkeyRu ...

  9. testng监听ISuiteListener

    实现ISuiteListener public class TestNgBeforeAction implements ISuiteListener{ public void onStart(ISui ...

  10. java代码List

    总结:代码代码你认得我吗? package com.c2; import java.util.ArrayList; //list import java.util.List; public class ...