题意

所求即为:

\(\sum\limits_{i_1=L}^{R}\sum\limits_{i_2=L}^{R}...\sum\limits_{i_k=L}^{R}[\gcd(i_1,i_2,...,i_k)=k]\)

套路地进行莫比乌斯反演:

\(\sum\limits_{i_1=\frac{L-1}{k}+1}^{\frac{R}{k}}\sum\limits_{i_2=\frac{L-1}{k}+1}^{\frac{R}{k}}...\sum\limits_{i_k=\frac{L-1}{k}+1}^{\frac{R}{k}}[\gcd(i_1,i_2,...,i_k)=1]\)

\(\sum\limits_{i_1=\frac{L-1}{k}+1}^{\frac{R}{k}}\sum\limits_{i_2=\frac{L-1}{k}+1}^{\frac{R}{k}}...\sum\limits_{i_k=\frac{L-1}{k}+1}^{\frac{R}{k}}\sum\limits_{x|\gcd(i_1,i_2,...,i_k)}\mu(x)\)

\(\sum\limits_{x=1}^{\frac{R}{k}}\mu(x)\sum\limits_{i_1=\frac{L-1}{k}+1}^{\frac{R}{k}}\sum\limits_{i_2=\frac{L-1}{k}+1}^{\frac{R}{k}}...\sum\limits_{i_k=\frac{L-1}{k}+1}^{\frac{R}{k}}[x|\gcd(i_1,i_2,...,i_k)]\)

\(\sum\limits_{x=1}^{\frac{R}{k}}\mu(x)\sum\limits_{i_1=\frac{L-1}{k*x}+1}^{\frac{R}{k*x}}\sum\limits_{i_2=\frac{L-1}{k*x}+1}^{\frac{R}{k*x}}...\sum\limits_{i_k=\frac{L-1}{k*x}+1}^{\frac{R}{k*x}}1\)

\(\sum\limits_{x=1}^{\frac{R}{k}}\mu(x)(\frac{R}{k*x}-\frac{L-1}{k*x})^n\)

杜教筛求\(\sum\limits_{x=1}^{\frac{R}{k}}\mu(x)\)就可以除法分块了

code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
const int inf=1e9;
const ll mod=1000000007;
int n,K,L,R;
int mu[maxn],sum[maxn];
ll ans;
bool vis[maxn];
vector<int>prime;
unordered_map<int,int>mp;
inline ll power(ll x,ll k,ll mod)
{
ll res=1;
while(k)
{
if(k&1)res=res*x%mod;
x=x*x%mod;k>>=1;
}
return res;
}
inline void pre_work(int n)
{
vis[1]=1;mu[1]=1;
for(int i=2;i<=n;i++)
{
if(!vis[i])prime.push_back(i),mu[i]=-1;
for(unsigned int j=0;j<prime.size()&&i*prime[j]<=n;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0)break;
mu[i*prime[j]]=-mu[i];
}
}
for(int i=1;i<=n;i++)sum[i]=sum[i-1]+mu[i];
}
inline int getsum(int x)
{
if(x<=100000)return sum[x];
if(mp.count(x))return mp[x];
ll res=1;
for(int l=2,r;l<=x;l=r+1)
{
r=x/(x/l);
res=(res-(r-l+1)*getsum(x/l)%mod)%mod;
}
return mp[x]=(res%mod+mod)%mod;
}
int main()
{
pre_work(100000);
scanf("%d%d%d%d",&n,&K,&L,&R);
L=(L-1)/K,R=R/K;
for(int l=1,r;l<=R;l=r+1)
{
r=min(L/l?L/(L/l):inf,R/(R/l));
ans=((ans+1ll*(getsum(r)-getsum(l-1))*power(R/l-L/l,n,mod)%mod)%mod+mod)%mod;
}
printf("%lld",ans);
return 0;
}

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

  1. [luoguP3172] [CQOI2015]选数(递推+容斥原理)

    传送门 不会莫比乌斯反演,不会递推. 但是我会看题解. 先将区间[L,H]变成(L-1,H],这样方便处理 然后求这个区间内gcd为k的方案数 就是求区间((L-1)/k,H/k]中gcd为1的方案数 ...

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

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

  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. 【BZOJ3930】[CQOI2015]选数 莫比乌斯反演

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

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

    [CQOI2015]选数(luogu) 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. 【BZOJ】3930: [CQOI2015]选数

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

随机推荐

  1. 解决Warning: Permanently added ' 192.168.1.230'(RSA) to the list of known hosts.

    前提 当我在刚安装的Red Hat Linux5.x系统中进行ssh 192.168.1.230 远程时,出现以下错误: Warning: Permanently added ' 192.168.1. ...

  2. Jvisualvm简单使用教程

    本博客介绍一下jvisualvm的简单使用教程,jvisualvm功能还是挺多的,不过本博客之简单介绍一下 1.拿线程快照信息 在jdk安装目录找到jvisualvm.exe,${JDK_HOME}\ ...

  3. kmp算法笔记(简单易懂)

    一般字符串比较长串m短串为n,那么用暴力方法复杂度为O(m*n) 但是kmp却可以达到O(m+n)!!!!!! 对于这个神奇的算法,我也是似懂非懂, 下面介绍一个简单的方法求kmp 1.求next数组 ...

  4. Vue全选和全不选

    HTML代码: <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> ...

  5. 【linux】glibc升级

    glibc升级 步骤如下: 1.下载解压glibc wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz tar zxvf glibc-2.18.ta ...

  6. jQuery 源码解析(六) $.each和$.map的区别

    $.each主要是用来遍历数组或对象的,例如: var arr=[11,12,13,14]; $.each(arr,function(element,index){ //遍历arr数组 console ...

  7. ASP.NET Core快速入门(第1章:介绍与引入)--学习笔记

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 1.介绍与引入 2.配置管理 3.依赖注入 4.ASP.NE ...

  8. 五分钟看懂UML类图与类的关系详解

    在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Association).其中关联又分为 ...

  9. Linux搭建www,mail,ftp三大DNS服务器

    ##############################-----服务器端----###############################1. 安装bind# yum install bin ...

  10. 转 echarts 的使用时遇到的坑 初始化和销毁,亲测有效!

    纵观ECharts图表实例化的API,主要有一下几个相关的实例化方法: 1.setOption(Object option,{boolean = true} notMerge) 参数: 1).Obje ...