这题做的时候接连想错了好多次……但是回到正轨上之后依然是一个套路题。(不过这题好像有比莫比乌斯反演更好的做法,莫比乌斯反演貌似是某种能过的暴力ヽ(´ー`)┌)不过能过也就行了吧哈哈。

  首先我们把数字的范围要进行缩小:最大公约数为 \(K\) 那自然所有选出来的数都必须是 \(K\) 的倍数。所以我们改选数为选择是 \(K\) 的多少倍。然后由于是最大公约数,所以选出来的这些数必须最大公约数等于\(1\)。实际上多个数的最大公约数\( = 1\)完全可以和两个数的最大公约数 \( = 1\) 用一样的方法去反演。只不过这题由于数据范围非常的大,所以处理 \(\mu\) 的前缀和必须要使用杜教筛。

#include <bits/stdc++.h>
using namespace std;
#define maxn 1000300
#define db double
#define int long long
int maxx = maxn - 1e2, mod = 1e9 + ;
int N, K, L, H, ans, Sum[maxn];
int tot, pri[maxn];
map <int, int> Map;
bitset <maxn> is_prime; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} int qpow(int x, int times)
{
int base = ; x %= mod;
for(; times; times >>= , x = (x * x) % mod)
if(times & ) base = (base * x) % mod;
return base;
} void Get_Mu()
{
Sum[] = ;
for(int i = ; i <= maxx; i ++)
{
if(!is_prime[i]) pri[++ tot] = i, Sum[i] = -;
for(int j = ; j <= tot; j ++)
{
int tem = i * pri[j];
if(tem > maxx) break;
is_prime[tem] = ;
if(!(i % pri[j])) { Sum[tem] = ; break; }
else Sum[tem] = - Sum[i];
}
}
for(int i = ; i <= maxx; i ++) Sum[i] = (Sum[i] + Sum[i - ]) % mod;
} int Mu(int x)
{
if(x <= maxx) return Sum[x];
if(Map[x]) return Map[x];
int ret = ;
for(int l = , r; l <= x; l = r + )
{
r = x / (x / l);
ret = (ret + (r - (l - )) * Mu(x / l) % mod) % mod;
}
return Map[x] = ( - ret + mod) % mod;
} int Solve(int n, int m)
{
int ret = ;
for(int l = , r; l <= m; l = r + )
{
if(n / l) r = min((n / (n / l)), (m / (m / l)));
else r = (m / (m / l));
ret += qpow(m / l - n / l, N) % mod * (Mu(r) - Mu(l - )) % mod;
ret %= mod;
}
return ret;
} signed main()
{
N = read(), K = read(), L = read(), H = read(), ans = ;
Get_Mu();
int l = floor((db) (L - ) / (db) K), r = floor((db) H / (db) K);
ans = Solve(l, r);
printf("%lld\n", (ans + mod) % mod);
return ;
}

【题解】CQOI2015选数的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. BZOJ3930: [CQOI2015]选数

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

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

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

  8. BZOJ3930:[CQOI2015]选数——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3930 https://www.luogu.org/problemnew/show/P3172#sub ...

  9. 【BZOJ】3930: [CQOI2015]选数

    题意 从区间\([L, R]\)选\(N\)个数(可以重复),问这\(N\)个数的最大公约数是\(K\)的方案数.(\(1 \le N, K \le 10^9, 1 \le L \le R \le 1 ...

随机推荐

  1. es6几个新增语法的使用----数组

    //数组的累加方法 let arr=[1,2,3]; let sum=arr.reduce((prev,cur)=>{ return prev+cur; }) console.log(sum)/ ...

  2. Python序列删除重复数据

    ## 对于列表来说,若不保持原有顺序,可以直接转换为set删除重复数据 nums = [1,2,32,2,2,4,3,2,3,42] nums = list(set(nums)) print(nums ...

  3. 【PHP】array_column函数

    array_column() 返回输入数组中某个单一列的值. 例子,从记录集中取出 last_name 列: <?php // 表示由数据库返回的可能记录集的数组 $a = array( arr ...

  4. [转]JavaScript中的匿名函数及函数的闭包

    JavaScript中的匿名函数及函数的闭包  原文地址:http://www.cnblogs.com/wl0000-03/p/6050108.html 1.匿名函数 函数是JavaScript中最灵 ...

  5. sorted() ,filter() ,map()的用法

    sorted() 排序函数. 语法: sorted(Iterable, key=None, reverse=False) Iterable: 可迭代对象 key: 排序规则(排序函数), 在sorte ...

  6. [Codeforces888E]Maximum Subsequence(暴力+meet-in-the-middle)

    题意:给定n.m.有n个数,选出若干数加起来对m取模,求最大值 n<=35 如果直接暴力就是235,会T, 这里用到一个思想叫meet-in-the-middle, 就是把数列分成两半分别搜索, ...

  7. AtCoder AGC028-F:Reachable Cells

    越来越喜欢AtCoder了,遍地都是神仙题. 题意: 给定一个\(N\)行\(N\)列的迷宫,每一个格子要么是障碍,要么是空地.每一块空地写着一个数码.在迷宫中,每一步只允许向右.向下走,且只能经过空 ...

  8. Django学习之天气调查实例(3):部署静态文件CSS、JS、images等(部署环境基于Ubuntu)

    在设计登录界面时,采用了网上下载的登录模板,漂亮,简易.但是在测试和部署时,发现原来模板中采用的js文件和css文件,却着实让我折腾了好几天. 在以往的网页设计中,一般只要把测试站点开启后,网页中的静 ...

  9. FireDAC 连接Access (accdb)数据库

    FireDAC可以方便连接数据库,但是要连接新版本的accdb数据库,要注意这样的事项(以Office2010版为例) 安装Office2010 x86版,注意,不能安装x64版,因为Delphi I ...

  10. spring boot 入门3 如何在springboot 上使用AOP

    Aop是spring的两大核心之一 那么如何在springboot中采用注解的形式实现aop那? 1)首先我们定义一个相关功能的切面类 并 采用@Aspect 注解来声明当前类为切面 同时采用@Com ...