传送门

颓了一小时柿子orz

首先题目要求的是$$\sum_{x_1=l}{r}\sum_{x_2=l}{r}...\sum_{x_n=l}^{r}[gcd(x_1,x_2...x_n)=k]$$

显然可以除掉一个k,设\(x=\lceil\frac{l}{k}\rceil,y=\lfloor\frac{l}{k}\rfloor\)即$$\sum_{x_1=x}{y}\sum_{x_2=x}{y}...\sum_{x_n=x}^{y}[gcd(x_1,x_2...x_n)=1]$$

可以联系两个数的情况,也就是$$\begin{matrix} \sum_{i=1}{n}\sum_{j=1}{m}[gcd(i,j)=1] &= \sum_{i=1}{n}\sum_{j=1}{m}\sum_{d|i,d|j}\mu(d)\ &=\sum_{d=1}^{min(n,m)}\mu(d)\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor \end{matrix}$$

这里有n个数也是类似的,即$$\sum_{d=1}{y}\mu(d)(\lfloor\frac{y}{d}\rfloor-\lfloor\frac{x-1}{d}\rfloor)n$$

注意后半部分,我们要求的是区间\([x,y]\)的d的倍数个数,也就是两个前缀和的差

然后数论分块即可.注意数据范围,\(\mu\)的前缀和要用杜教筛求

#include<bits/stdc++.h>
#define LL long long
#define db double
#define il inline
#define re register using namespace std;
const int N=1e6+10,mod=1e9+7;
il int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
il int fpow(int a,int b){int an=1;while(b){if(b&1) an=1ll*an*a%mod;a=1ll*a*a%mod,b>>=1;} return an;}
int n,kk,l,r;
int prm[N],mu[N],mu2[N],pp[N],tt,ans;
bool v[N];
il int gmu(int x)
{
if(x<=N-10) return mu[x];
if(v[x/10000]) return mu2[x/10000];
v[x/10000]=1;
LL an=1;
for(int i=2,j;i<=x;i=j+1)
{
j=(x/(x/i));
an-=1ll*gmu(x/i)*(j-i+1);
}
return mu2[x/10000]=an;
} int main()
{
n=rd(),kk=rd(),l=rd(),r=rd();
l=(l+kk-1)/kk-1,r/=kk;
mu[1]=1;
for(int i=2;i<=N-10;++i)
{
if(!pp[i]) pp[i]=1,mu[i]=-1,prm[++tt]=i;
for(int j=1;j<=tt&&i*prm[j]<=N-10;++j)
{
pp[i*prm[j]]=1,mu[i*prm[j]]=-mu[i];
if(i%prm[j]==0) {mu[i*prm[j]]=0;break;}
}
}
for(int i=2;i<=N-10;++i) mu[i]+=mu[i-1];
for(int i=1,j=1;i<=r;++j,i=j)
{
j=min(l>=i?l/(l/i):(int)1e9,r/(r/i));
ans=((ans+1ll*(gmu(j)-gmu(i-1))*fpow(r/i-l/i,n)%mod)%mod+mod)%mod;
}
printf("%d\n",ans);
return 0;
}

luogu P3172 [CQOI2015]选数的更多相关文章

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

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

  2. Luogu 3172 [CQOI2015]选数

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

  3. 洛谷P3172 [CQOI2015]选数(容斥)

    传送门 首先,进行如下处理 如果$L$是$K$的倍数,那么让它变成$\frac{L}{K}$,否则变成$\frac{L}{K}+1$ 把$H$变成$\frac{H}{K}$ 那么,现在的问题就变成了在 ...

  4. [bzoj3930] [洛谷P3172] [CQOI2015] 选数

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. css 选择符中的 >,+,~,=,^,$,*,|,:,空格 的意思

    一,作为元素选择符 * 表示通配选择符 * {} // 所有元素 二,作为关系选择符 空格 表示包含选择符 a div{} // 被a元素包含的div > 表示子元素选择符 a > div ...

  2. 设置SVN不需要提交的文件

        设置SVN不需要提交的文件 .project .classpath .settings .externalToolBuilders   也可以在TortoiseSVN中设置

  3. A1129. Recommendation System

    Recommendation system predicts the preference that a user would give to an item. Now you are asked t ...

  4. java操作redis集群配置[可配置密码]和工具类(比较好用)

    转: java操作redis集群配置[可配置密码]和工具类 java操作redis集群配置[可配置密码]和工具类     <dependency>   <groupId>red ...

  5. 【译】4. Java反射——字段

    原文地址:http://tutorials.jenkov.com/java-reflection/fields.html ======================================= ...

  6. 苹果电脑利用wget总是会出现无法建立 SSL 连接的问题

    在做迁徙学习的过程中,需要下载已经训练好的Inception_v3模型,首先我们为了将下载的模型保存到指定的地方,我们需要利用 wget -P 想要保存的目录 模型的网址,例如 wget -P /Vo ...

  7. JS学习笔记Day1

    一.JS概述 1.什么是JS? 是一种基于对象和事件驱动的客户端脚本语言: 运行环境:浏览器(通过浏览器解释执行) 2.JS产生于哪一年,哪个公司,是谁?第一个名字是什么? 1995年,网景公司.布兰 ...

  8. (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  9. awk统计文件大小

    在Linux系统中,经常会遇到某个目录下文件很多,要统计这些文件的空间大小.可以采用awk来实现.如下是实现这个功能的例子. vim sum.sh #!/bin/bash# sum.shcd //ba ...

  10. zookeeper的搭建和简单的使用

    一.什么是zookeeper,有什么用 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据 ...