【题目链接】

  • 点击打开链接

【思路要点】

  • 显然问题可以转化为\(K=1\)的形式。
  • 那么,我们实际上要求\(\sum_{i_1,i_2,...,i_N=L}^{R}\epsilon(gcd(i_1,i_2,...,i_N))\)。
  • \(=\sum_{i_1,i_2,...,i_N=L}^{R}\sum_{d/i_1,i_2,...,i_N}\mu(d)\)
  • \(=\sum_{d=1}^{R}\mu(d)(\lfloor\frac{R}{d}\rfloor-\lfloor\frac{L-1}{d}\rfloor)^N\)
  • 其中\((\lfloor\frac{R}{d}\rfloor-\lfloor\frac{L-1}{d}\rfloor)^N\)只有\(O(\sqrt{L}+\sqrt{R})\)种取值,而\(\mu(d)\)的前缀和可以通过杜教筛求得。
  • 时间复杂度\(O(L^{\frac{2}{3}}+R^{\frac{2}{3}}+(\sqrt{L}+\sqrt{R})*LogN)\)。

【代码】

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2e6 + 5;
const int P = 1e9 + 7;
template <typename T> void chkmax(T &x, T y) {x = max(x, y); }
template <typename T> void chkmin(T &x, T y) {x = min(x, y); }
template <typename T> void read(T &x) {x = 0; int f = 1;char c = getchar();for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';x *= f;
}
template <typename T> void write(T x) {if (x < 0) x = -x, putchar('-');if (x > 9) write(x / 10);putchar(x % 10 + '0');
}
template <typename T> void writeln(T x) {write(x);puts("");
}
int tot, prime[MAXN], f[MAXN];
int miu[MAXN], s[MAXN];
int sl[MAXN], sr[MAXN];
int n, l, r, k;
void init() {miu[1] = s[1] = 1;for (int i = 2; i < MAXN; i++) {if (f[i] == 0) {f[i] = prime[++tot] = i;miu[i] = -1;}s[i] = (s[i - 1] + miu[i] + P) % P;for (int j = 1; j <= tot && prime[j] <= f[i]; j++) {int tmp = prime[j] * i;if (tmp >= MAXN) break;f[tmp] = prime[j];if (prime[j] == f[i]) miu[tmp] = 0;else miu[tmp] = -miu[i];}}
}
int getsl(int n) {int m = l / n, ans = 1;if (n < MAXN) return s[n];else if (sl[m] != -1) return sl[m];int now = 2;while (now <= n) {int nxt = n / (n / now) + 1;ans = (ans - 1ll * (nxt - now) * getsl(n / now) % P + P) % P;now = nxt;}return sl[m] = ans;
}
int getsr(int n) {int m = r / n, ans = 1;if (n < MAXN) return s[n];else if (sr[m] != -1) return sr[m];int now = 2;while (now <= n) {int nxt = n / (n / now) + 1;ans = (ans - 1ll * (nxt - now) * getsr(n / now) % P + P) % P;now = nxt;}return sr[m] = ans;
}
int power(int x, int y) {if (y == 0) return 1;int tmp = power(x, y / 2);if (y % 2 == 0) return 1ll * tmp * tmp % P;else return 1ll * tmp * tmp % P * x % P;
}
int main() {read(n), read(k), read(l), read(r);if (l % k == 0) l = l / k - 1;else l = l / k; r /= k;memset(sl, -1, sizeof(sl));memset(sr, -1, sizeof(sr));init();int now = 1, last = 0, ans = 0;while (now <= r) {int nxtl, nxtr;if (now <= l) nxtl = l / (l / now);else nxtl = r;nxtr = r / (r / now);if (nxtr <= nxtl) {ans = (ans + 1ll * (getsr(nxtr) - last + P) * power(r / now - l / now + P, n)) % P;last = getsr(nxtr); now = nxtr + 1;} else {ans = (ans + 1ll * (getsl(nxtl) - last + P) * power(r / now - l / now + P, n)) % P;last = getsl(nxtl); now = nxtl + 1;}}writeln(ans);return 0;
}

【BZOJ3930】【CQOI2015】选数相关推荐

  1. BZOJ3930: [CQOI2015]选数

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

  2. [BZOJ3930][CQOI2015]选数(数论+容斥)

    首先,进行如下处理: 1.如果 L L是KK的倍数,那么把 L L变为LK\frac{L}{K},否则变为 ⌊LK⌋+1 \lfloor\frac{L}{K}\rfloor+1. 2.把 H H变成⌊ ...

  3. [bzoj3930] [CQOI2015]选数

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

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

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

  5. [CQOI2015]选数(杜教筛)

    [CQOI2015]选数 推式子 根据题意可写出式子: ∑a1=LH∑a2=LH⋯∑an=LH[gcd(a1,a2-an)=k]∑a1=⌈Lk⌉⌊Hk⌋∑a2=⌈Lk⌉⌊Hk⌋⋯∑an=⌈Lk⌉⌊Hk ...

  6. 【BZOJ3930】选数(莫比乌斯反演倍数形式,杜教筛)

    [BZOJ3930]选数 https://www.cnblogs.com/cjyyb/p/8303813.html

  7. 【反演复习计划】【COGS2433】【bzoj3930,CQOI2015选数】爱蜜莉雅的冰魔法

    同bzoj3930. (日常盗题图) #include<bits/stdc++.h> #define N 1000010 #define yql 1000000007 #define ll ...

  8. bzoj 3930: [CQOI2015]选数

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

  9. [CQOI2015]选数(数论分块+杜教筛)

    problem 洛谷链接 solution 将 L,HL,HL,H 的范围放缩 1K\frac 1 KK1​,都除掉 KKK,特殊的 LLL 边界注意一下. H←H/K,L←(L−1)/K+1H\le ...

  10. 洛谷P3172 [CQOI2015]选数

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

最新文章

  1. 实现Java Socket 客户端服务端交互实例
  2. PHP内核探索之变量(2)-理解引用
  3. python3的数据类型的有序无序
  4. java redis 批量删除key_Redis,就是这么朴实无华
  5. 【百家稷学】深度学习与计算机视觉核心理论与实践(中国地质大学实训)
  6. linux的模块化,GoboLinux 017 发布,模块化的 Linux 发行版
  7. 数据结构(字典,跳跃表)、使用场景(计数器、缓存、查找表、消息队列、会话缓存、分布式锁)、Redis 与 Memcached、 键的过期时间、数据淘汰策略、持久化(RDB、AOF)
  8. 提高性能:流的非阻塞处理
  9. 可视化分析js的内存分配与回收
  10. 局域网Ubuntu与WinXP实现文件共享
  11. 携号转网全面启动后,新诈骗套路也跟上了!一招教你识别!
  12. ILSpy反编译工具的使用
  13. 【note】《软件体系结构》知识整理(1-5章)
  14. 拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列
  15. VB 源码 产生任意数之间随机数,支持负数
  16. 夯实Java基础系列21:Java8新特性终极指南
  17. 在本地计算机无法启动iis,IIS常见错误及解决方法
  18. Codeforces - Ivan and Burgers
  19. 领导力21法则-- 要点总结
  20. 报错:Unhandled exception

热门文章

  1. 牛客网——数据分类处理
  2. python 3.6.5官网下载步骤_python3.6下载
  3. 头部底部通栏,内容区域滚动布局
  4. 2014.09.28
  5. C#将数字自动翻译为中文,使用循环迭代的方式
  6. 求生之路显示服务器指令大全手机,求生之路2指令大全 求生之路2指令怎么用? (7) _地图指令_游侠网...
  7. Win10或win11安装sql2000或msde2000关键步骤
  8. OPPO造车,只差官宣?
  9. webpack打包实例详解
  10. 区分a++和++a,浅谈两者的效率问题