线性筛积性函数+反演T套路——bzoj4407
2024-09-03 22:46:51
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define maxn 5000005
ll n,m,K; ll Pow(ll a,ll b){
ll res=;
while(b){
if(b%)res=res*a%mod;
b>>=;a=a*a%mod;
}
return res;
}
bool vis[maxn];
ll prime[maxn],G[maxn],sum[maxn],mu[maxn],mm;
void init(){
mu[]=G[]=;
for(int i=;i<maxn;i++){
if(!vis[i]){
prime[++mm]=i;
mu[i]=-;
G[i]=Pow(i,K)-;
if(G[i]<)G[i]+=mod;
}
for(int j=;j<=mm;j++){
if(i*prime[j]>=maxn)break;
vis[i*prime[j]]=;
if(i%prime[j]==){
mu[i*prime[j]]=;
G[i*prime[j]]=G[i]*Pow(prime[j],K)%mod;
break;
}
else {
mu[i*prime[j]]=-mu[i];
G[i*prime[j]]=G[i]*G[prime[j]]%mod;
}
}
}
for(int i=;i<maxn;i++)
sum[i]=(sum[i-]+G[i])%mod;
} int main(){
int t;cin>>t>>K;
init();
while(t--){
cin>>n>>m;
if(n>m)swap(n,m);
ll ans=;
for(int l=,r;l<=n;l=r+){
r=min(n/(n/l),m/(m/l));
ll tmp=((sum[r]-sum[l-])%mod+mod)%mod;
ans=(ans+tmp*(n/l)%mod*(m/l)%mod)%mod;
}
cout<<ans<<'\n';
}
}
最新文章
- [Scala] 快学Scala A2L2
- win7安装Linux
- python网络编程-socket
- AJAX JSONP源码实现(原理解析)
- const与#define宏常量 , inline与#define
- 后台获取不规则排列RadioButton组的值
- python 基础——装饰器
- [转]更新Debian软件源
- OD: First Step
- 开源yYmVc项目 v 0.2 版本号介绍
- Objective-C代码块语法(block)使用
- 利用 Grunt (几乎)无痛地做前端开发 (一)之单元测试
- Windows下彻底卸载删除SQL Serever2012
- Java大世界
- 输入流IS和输出流OS学习总结
- Shell学习之结合正则表达式与通配符的使用(五)
- Python pickle使用
- 升级pip10.0.0后出现ModuleNotFoundError: No module named 'pip'的问题
- AI学习经验总结
- 【总结】redis和memcached的区别