P4449 于神之怒加强版 (莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P4449
给定n,m,k,计算
\(\sum_{i=1}^n \sum_{j=1}^m \mathrm{gcd}(i,j)^k\)
对1000000007取模的结果
/*
-----------------------
基本套路:
1.枚举约数
2.枚举整除分块,观察倍数关系
3.发现g(T)是[积性函数],且g=μ*f.此时有很好的转移方法
if(i为质数) g[i]=f[i]-1
else{
if(i为某个质数整数幂) g[p^k]=g[p^(k-1)]*f[p]+f[1]*μ[p^k]
else g[i]=g[i/low[i]]*g[low[i]*prime[j]] 即把最小的约数都放到一起,以满足互质
}
4.预处理的初始化,g[1]=1.
-----------------------2019.2.15
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long LL;
const int INF=1e9+7;
inline LL read(){
register LL x=0,f=1;register char c=getchar();
while(c<48||c>57){if(c=='-')f=-1;c=getchar();}
while(c>=48&&c<=57)x=(x<<3)+(x<<1)+(c&15),c=getchar();
return f*x;
}
const int MAXN=5e6+5;
const int mod=1e9+7;
LL mu[MAXN],g[MAXN],f[MAXN],sum[MAXN],prime[MAXN],low[MAXN];
bool vis[MAXN];
int T,n,m,k;
inline int qpow(int a,int b){
LL res=1;
while(b){
if(b&1) (res*=a)%=mod;
(a*=a)%=mod;
b>>=1;
}
return res;
}
inline void init(int n){
mu[1]=1;
g[1]=1;//
for(int i=1;i<=n;i++)
f[i]=qpow(i,k);
for(int i=2;i<=n;i++){
if(!vis[i]){
prime[++prime[0]]=i;
mu[i]=-1;
low[i]=i;
g[i]=(f[i]-1)%mod;//i为质数的转移
}
for(int j=1;j<=prime[0]&&i*prime[j]<=n;j++){
vis[i*prime[j]]=true;
if(i%prime[j]==0){
low[i*prime[j]]=low[i]*prime[j];
if(low[i]==i) //整次幂情况
g[i*prime[j]]=(g[i]*f[prime[j]])%mod;// +f[1]*mu[i*prime[j]]
else
g[i*prime[j]]=(g[i/low[i]]*g[low[i]*prime[j]])%mod;
break;
}
else{
g[i*prime[j]]=(g[i]*g[prime[j]])%mod;
low[i*prime[j]]=prime[j];//每个数只会由它最小的约数更新一次
mu[i*prime[j]]=-mu[i];
}
}
}
for(int i=1;i<=n;i++)
sum[i]=(sum[i-1]+g[i])%mod;
}
signed main(){
//freopen("4449.in","r",stdin);
T=read(),k=read();
init(5e6);
while(T--){
n=read(),m=read();
if(n>m) swap(n,m);
LL ans=0;
for(int l=1,r;l<=n;l=r+1){
r=min(n/(n/l),m/(m/l));
(ans+=(n/l)*(m/l)%mod*(sum[r]-sum[l-1]+mod)%mod)%=mod;
}
printf("%lld\n",ans);
}
}
P4449 于神之怒加强版 (莫比乌斯反演)的更多相关文章
- 洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P4449 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i, ...
- 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 241 Solved: 119[Submit][Status][Discu ...
- BZOJ 4407 于神之怒加强版 (莫比乌斯反演 + 分块)
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1067 Solved: 494[Submit][Status][Disc ...
- BZOJ4407 于神之怒加强版 - 莫比乌斯反演
题解 非常裸的莫比乌斯反演. 但是反演完还需要快速计算一个积性函数(我直接用$nlogn$卷积被TLE了 推荐一个博客 我也不想再写一遍了 代码 #include<cstring> #in ...
- 【bzoj4407】于神之怒加强版 莫比乌斯反演+线性筛
题目描述 给下N,M,K.求 输入 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. 输出 如题 ...
- 【BZOJ4407】于神之怒加强版 莫比乌斯反演
[BZOJ4407]于神之怒加强版 Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行, ...
- BZOJ 4407: 于神之怒加强版 [莫比乌斯反演 线性筛]
题意:提前给出\(k\),求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)^k\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d|D ...
- BZOJ4407: 于神之怒加强版(莫比乌斯反演 线性筛)
Description 给下N,M,K.求 感觉好迷茫啊,很多变换看的一脸懵逼却又不知道去哪里学.一道题做一上午也是没谁了,, 首先按照套路反演化到最后应该是这个式子 $$ans = \sum_{d ...
- BZOJ.4407.于神之怒加强版(莫比乌斯反演)
题目链接 Description 求\[\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^K\ \mod\ 10^9+7\] Solution 前面部分依旧套路. \[\begin{ ...
- luogu4449 于神之怒加强版(莫比乌斯反演)
link 给定n,m,k,计算\(\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^k\)对1000000007取模的结果 多组数据,T<=2000,1<=N,M,K&l ...
随机推荐
- 算法技巧讲解》关于对于递推形DP的前缀和优化
这是在2016在长沙集训的第三天,一位学长讲解了“前缀和优化”这一技巧,并且他这一方法用的很6,个人觉得很有学习的必要. 这一技巧能使线性递推形DP的速度有着飞跃性的提升,从O(N2)优化到O(N)也 ...
- 【HDU5187】zhx's contest
[问题描述] 作为史上最强的刷子之一,zhx的老师让他给学弟(mei)们出n道题.zhx认为第i道题的难度就是i.他想要让这些题目排列起来很漂亮. zhx认为一个漂亮的序列{ai}下列两个条件均需满足 ...
- hdu 4278 Faulty Odometer(进制转换)
十进制转八进制的变形: #include<stdio.h> int main() { int n; while(scanf("%d",&n)!=EOF& ...
- hdu 1556 Color the ball(非线段树做法)
#include<stdio.h> #include<string.h> ]; int main() { int n,i; int a,b; while(scanf(" ...
- 编写高质量代码改善C#程序的157个建议——建议16:元素数量可变的情况下不应使用数组
建议16:元素数量可变的情况下不应使用数组 在C#中,数组一旦被创建,长度就不能改变.如果我们需要一个动态且可变长度的集合,就应该使用ArrayList或List<T>来创建. 而数组本身 ...
- Sharepoint2013搜索学习笔记之自定义结果显示模板(九)
搜索结果通过套用定义好的显示模板来展示结果,显示模板由js和html组成,我们可以通过修改显示模板,然后将修改好的显示模板跟搜索结果绑定起来,来修改搜索结果的显示效果,例子如下图: 修改前 修改后 第 ...
- 构建空Datatable
方法一 DT = new DataTable(); DataRow DR = DT.NewRow(); //构建列(名称,数据类型) DT.Columns.Add("代码", Ty ...
- indexDB的使用和异步图片blob文件保存
//调整webkit兼容性 var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || w ...
- 扩展卢卡斯定理(Exlucas)
题目链接 戳我 前置知识 中国剩余定理(crt)或扩展中国剩余定理(excrt) 乘法逆元 组合数的基本运用 扩展欧几里得(exgcd) 说实话Lucas真的和这个没有什么太大的关系,但是Lucas还 ...
- React基础篇 (1)-- render&components
render 基础用法 //1.创建虚拟DOM元素对象 var vDom=<h1>hello wold!</h1> //2.渲染 ReactDOM.render(vDom,do ...