BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛
2024-10-07 11:34:46
求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$
$\Rightarrow \sum_{i=\frac{L}{k}}^{\frac{R}{k}}\sum_{i'=\frac{L}{k}}^{\frac{R}{k}}....[gcd_{i=1}^{n}(i)==1]$
$\Rightarrow \sum_{i=\frac{L}{k}}^{\frac{R}{k}}\sum_{i'=\frac{L}{k}}^{\frac{R}{k}}....\sum_{d|gcd_{i=1}^{n}(i)}\mu(d)$
$\Rightarrow\sum_{d=1}^{\frac{R}{d}}\mu(d)(\left \lfloor \frac{R}{kd} \right \rfloor-\left \lfloor \frac{L-1}{kd} \right \rfloor)^n$
用杜教筛算莫比乌斯函数前缀和,整除分块算一下就行.
#include<bits/stdc++.h>
#define maxn 1040000
#define M 1000001
#define inf 0x7f7f7f7f
#define ll long long
using namespace std;
ll mod = 1000000007;
void setIO(string s)
{
string in=s+".in";
freopen(in.c_str(),"r",stdin);
}
map<int,ll>ansmu;
int cnt;
bool vis[maxn];
int prime[maxn], mu[maxn];
ll sumv[maxn];
ll qpow(ll base,ll k)
{
ll tmp=1;
while(k)
{
if(k&1) tmp=tmp*base%mod;
base=base*base%mod;
k>>=1;
}
return tmp;
}
void Linear_shaker()
{
mu[1]=1;
int i,j;
for(i=2;i<=M;++i)
{
if(!vis[i]) prime[++cnt]=i, mu[i]=-1;
for(j=1;j<=cnt&&1ll*i*prime[j]<=M;++j)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0)
{
mu[i*prime[j]]=0;
break;
}
mu[i*prime[j]]=-mu[i];
}
}
for(i=1;i<=M;++i) sumv[i]=(sumv[i-1]+mu[i]+mod)%mod;
}
ll get(ll n)
{
if(n<=M) return sumv[n];
if(ansmu[n]) return ansmu[n];
ll i,j,re=0;
for(i=2;i<=n;i=j+1)
{
j=(n/(n/i));
re=(re+(j-i+1)%mod*get(n/i)%mod+mod)%mod;
}
return ansmu[n]=(1ll-re+mod)%mod;
}
int main()
{
// setIO("input");
ll n,k,L,R,i,j,re=0;
scanf("%lld%lld%lld%lld",&n,&k,&L,&R);
L = (L - 1) / k, R = R / k;
Linear_shaker();
for(i=1;i<=R;i=j+1)
{
j=min(R/(R/i), L/i?L/(L/i):inf);
re=(re+qpow(R/i-L/i, n) * (get(j)-get(i-1)+mod)%mod)%mod;
}
printf("%lld\n",re);
return 0;
}
最新文章
- 多个div同时居中的写法
- same story,different day
- Android进程间通信之LocalSocket通信
- c#之委托总结
- 基于C#的钉钉SDK开发(1)--对官方SDK的重构优化
- PageHelper补充
- Java并发编程的艺术&#183; 笔记(1)
- 1—ARM中的寄存器
- OO第一次博客作业(第一单元总结)
- Robot Framework - 一些练习
- 【pyqtgraph绘图】安装pyqtgraph
- 将NetBIOS名称解析为IP地址的常用方法
- 使用jstl报错:According to TLD or attribute directive in tag file, attribute value does not accept any expressions
- 微服务深入浅出(3)-- 服务的注册和发现Eureka
- java面试第九天
- Hdu5693 D Game
- Keras自定义评估函数
- sar详解(linux/unix通用)
- MicroPython (一)点亮我的Led
- redis问题集
热门文章
- Delphi XE2 之 FireMonkey 入门(20) - TStyleBook(皮肤、样式相关)
- Jenkins简介&;邮箱配置
- Vue+Java实现在页面树形展示文件目录
- 基于nginx实现二维码下载安装apk文件
- spring包
- Python基础-7.1字符串的格式化
- python列表-简单操作
- [Web 前端] 004 html 小练习
- HDU-6187.DestroyWalls(最大生成树)
- 打开虚拟机提示 无法获得vmci 驱动程序的版本:句柄无效