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]$$
显然可以除掉一个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]选数的更多相关文章
- P3172 [CQOI2015]选数(莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P3172 [题解] https://www.luogu.org/blog/user29936/solutio ...
- Luogu 3172 [CQOI2015]选数
考虑枚举$k$的倍数$dk$,容易知道$\left \lceil \frac{L}{K} \right \rceil\leq d\leq \left \lfloor \frac{H}{k} \righ ...
- 洛谷P3172 [CQOI2015]选数(容斥)
传送门 首先,进行如下处理 如果$L$是$K$的倍数,那么让它变成$\frac{L}{K}$,否则变成$\frac{L}{K}+1$ 把$H$变成$\frac{H}{K}$ 那么,现在的问题就变成了在 ...
- [bzoj3930] [洛谷P3172] [CQOI2015] 选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- [CQOI2015]选数(莫比乌斯反演,杜教筛)
[CQOI2015]选数(luogu) Description 题目描述 我们知道,从区间 [L,H](L 和 H 为整数)中选取 N 个整数,总共有 (H-L+1)^N 种方案. 小 z 很好奇这样 ...
- BZOJ 3930: [CQOI2015]选数 递推
3930: [CQOI2015]选数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pro ...
- bzoj3930[CQOI2015]选数 容斥原理
3930: [CQOI2015]选数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1383 Solved: 669[Submit][Status] ...
- 洛谷 [CQOI2015]选数 解题报告
[CQOI2015]选数 题目描述 我们知道,从区间\([L,H]\)(\(L\)和\(H\)为整数)中选取\(N\)个整数,总共有\((H-L+1)^N\)种方案. 小\(z\)很好奇这样选出的数的 ...
- 【BZOJ3930】[CQOI2015]选数 莫比乌斯反演
[BZOJ3930][CQOI2015]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律 ...
随机推荐
- 【SFA官方译文】:Spring Cloud Data Flow中的ETL
原创: 影宸风洛 SpringForAll社区 昨天 原文链接:https://www.baeldung.com/spring-cloud-data-flow-etl 作者:Norberto Ritz ...
- CF235D Graph Game
CF235D Graph Game 好题 树? 考虑每个点被计算多少次 但是和当前分治中心有关系的 所以,f(a,b),对于a作为中心时候,和b相连的概率 也就是两者必然分离,最后一次连在一起的时候, ...
- @Async的简单用法总结
前言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时 候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3 ...
- Django 创建超级用户
Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制 #创建超级用户 python manage.py creat ...
- 【译】12. Java反射——类的动态加载和重新加载
原文地址:http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html 博主最近比较忙,争取每周翻译 ...
- SpringBoot+Shiro入门小栗子
写一个不花里胡哨的纯粹的Springboot+Shiro的入门小栗子 效果如图: 首页:有登录注册 先注册一个,然后登陆 登录,成功自动跳转到home页 home页:通过认证之后才可以进 代码部分: ...
- java静态变量和final关键字
静态变量其实就是全局变量 静态方法不需要实例化对象,直接可以调用. public class StaticVariable { public static int num1=20; public vo ...
- Failed to execute aapt:Process 'command '/build-tools/28.0.2/aapt'' finished with non-zero exit value 1
Caused by: com.android.ide.common.process.ProcessException: Error while executing process /Users/hou ...
- 配置ssl
1.配置 <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000&q ...
- python并发编程(并发与并行,同步和异步,阻塞与非阻塞)
最近在学python的网络编程,学了socket通信,并利用socket实现了一个具有用户验证功能,可以上传下载文件.可以实现命令行功能,创建和删除文件夹,可以实现的断点续传等功能的FTP服务器.但在 ...