博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 4407: 于神之怒加强版 [莫比乌斯反演 线性筛]
阅读量:7043 次
发布时间:2019-06-28

本文共 1664 字,大约阅读时间需要 5 分钟。

题意:提前给出\(k\),求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)^k\)


套路推♂倒

\[ \sum_{D=1}^n \sum_{d|D} d^k\mu(\frac{D}{d}) \frac{n}{D} \frac{m}{D} \]

是一个\(g = idk * \mu\)啊,单位幂函数和莫比乌斯函数的卷积!

\(g(1) = 1\)

\(g(p) = -1 + p^k\)
因为带着\(\mu\),只有sf才有贡献
所以\(p \mid i\)只能把\(p\)放到\(d^k\)里了,就是\(g(i)\cdot p\)
或者考虑\(g(p^k)\)只有1和p有贡献也可以,直接得到计算公式再递推

#include 
#include
#include
#include
#include
using namespace std;const int N=5e6+5, INF=1e9, P=1e9+7;#define pii pair
#define MP make_pair #define fir first#define sec secondtypedef long long ll;inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;} int n, m, k;int notp[N], p[N], mu[N];ll pk[N], g[N];inline ll Pow(ll a, int b) { ll ans = 1; for(; b; b>>=1, a=a*a%P) if(b&1) ans = ans*a%P; return ans;}inline ll powk(int a) {return pk[a] ? pk[a] : pk[a]=Pow(a, k);}void sieve(int n) { mu[1] = 1; g[1] = 1; for(int i=2; i<=n; i++) { if(!notp[i]) p[++p[0]] = i, mu[i] = -1, g[i] = -1 + powk(i); for(int j=1; j<=p[0] && i*p[j]<=n; j++) { int t = i*p[j]; notp[t] = 1; if(i%p[j] == 0) { g[t] = g[i]*powk(p[j])%P; mu[t] = 0; break; } g[t] = g[i]*g[p[j]]%P; mu[t] = -mu[i]; } } for(int i=1; i<=n; i++) g[i] = (g[i] + g[i-1])%P;}ll cal(int n, int m) { ll ans=0; int r; for(int i=1; i<=n; i=r+1) { r = min(n/(n/i), m/(m/i)); ans = (ans+ (g[r] - g[i-1]) * (n/i)%P * (m/i)%P )%P; } return (ans + P) %P;}int main() { //freopen("in","r",stdin); int T=read(); k=read(); sieve(N-1); while(T--) { n=read(); m=read(); if(n>m) swap(n, m); printf("%lld\n", cal(n, m)); }}

转载地址:http://smqal.baihongyu.com/

你可能感兴趣的文章
Odoo9发行说明
查看>>
logging日志管理--将日志打印在屏幕上
查看>>
PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理
查看>>
mongodb 3.x 之实用新功能窥看[2] ——使用$lookup做多表关联处理
查看>>
实际利率 > 名义利率
查看>>
第三篇:基于K-近邻分类算法的手写识别系统
查看>>
9.6智力题(一)——给定两条绳子,每条绳子燃烧殆尽正好用一个小时,用这两条绳子准确计时15分钟...
查看>>
启动redis
查看>>
Swift 互斥锁写法
查看>>
matlab中元胞数组的创建与内容读取
查看>>
P3390 【模板】矩阵快速幂
查看>>
DateFormatUtil格式化时间
查看>>
RPi 2B QEMU 模拟树莓派
查看>>
Asp.net Web Api开发(第四篇)Help Page配置和扩展
查看>>
Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat 解决办法
查看>>
【转】ASP.NET中验证控件的使用
查看>>
搭建和测试 Redis 主备和集群
查看>>
Android应用资源
查看>>
app开发中如何利用sessionId来实现服务端与客户端保持回话
查看>>
swift学习笔记(五)构造过程
查看>>