并不对劲的p4449于神之怒加强版
题目大意
给定\(t,k(t\leq2000,k\leq5*10^6)\)
\(t\)组询问,每组给出\(n,m(n,m\leq5*10^6)\)求$\sum_{i=1}^n \sum_{j=1}^m \mathrm{gcd}(i,j)^k $
题解
假设\(n\)较小
枚举gcd
原式=\(\sum_{a=1}^{n}a^k\sum_{i=1}^{\lfloor\frac{n}{a}\rfloor} \sum_{j=1}^{\lfloor\frac{m}{a}\rfloor} [gcd(i,j)=1]\)
=\(\sum_{a=1}^{n}a^k\sum_{i=1}^{\lfloor\frac{n}{a}\rfloor} \sum_{j=1}^{\lfloor\frac{m}{a}\rfloor}\sum_{d|i且d|j}\mu(d)\)
=\(\sum_{a=1}^{n}a^k\sum_{d=1}^{\lfloor\frac{n}{a}\rfloor}\mu(d)*{\lfloor\frac{n}{d*a}\rfloor}*{\lfloor\frac{m}{d*a}\rfloor}\)
设\(b=d*a\)
=\(\sum_{a=1}^{n}a^k\sum_{a|b}^{n}\mu(\frac{b}{a})*{\lfloor\frac{n}{b}\rfloor}*{\lfloor\frac{m}{b}\rfloor}\)
=\(\sum_{b=1}^{n}{\lfloor\frac{n}{b}\rfloor}*{\lfloor\frac{m}{b}\rfloor}\sum_{a|b}^{n}\mu(\frac{b}{a})*a^k\)
设\(f(x)=\sum_{a|x}^{n}\mu(\frac{x}{a})*a^k\)
发现\(f(x)\)是\(\mu\)卷\(x^k\),所以\(f(x)\)也是个积性函数,可以用筛法求
要考虑两件事:1.当\(p\)为质数时,\(f(p)=?\) 2.当\(p\)为质数且\(p|q\)时,\(f(p*q)=?\)
1.\(f(p)=1^k*\mu(p)+p^k*mu(1)=p^k-1\)
2.设\(q\)中\(p\)这个因子的指数为\(c\),则有\(f(q)=f(\frac{q}{p^c})*f(p^c),f(p*q)=f(\frac{q}{p^c})*f(p^{c+1})\),即\(f(p*q)=f(q)*(\frac{f(p^{c+1})}{f(p^c)})\)
那么只要知道\(\frac{f(p^{c+1})}{f(p^c)}\),就能用\(f(q)\)推出\(f(p*q)\)了
发现\(f(p^c)=\sum_{a|p^c}a^k*\mu(\frac{p^c}{a})\),其中\(\mu(\frac{p^c}{a})\)只在\(a=p^c\)时为1,在\(a=p^{c-1}\)时为-1,其余时刻都为0
那就有\(f(p^c)=p^{c*k}-p^{(c-1)*k}\)
同理可得\(f(p^{c+1})=p^{(c+1)*k}-p^{c*k}\)
所以\(\frac{f(p^{c+1})}{f(p^c)}=p^k\)
预处理筛出\(f(x)\)后,询问时整出分块就行了
代码
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<iomanip>
#include<iostream>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define rep(i,x,y) for(register int i=(x);i<=(y);++i)
#define dwn(i,x,y) for(register int i=(x);i>=(y);--i)
#define maxn 5000010
#define lim (maxn-10)
#define LL long long
#define add(x) (x>=mod?x-mod:x)
using namespace std;
int read()
{
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)&&ch!='-')ch=getchar();
if(ch=='-')f=-1,ch=getchar();
while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return x*f;
}
void write(int x)
{
if(x==0){putchar('0'),putchar('\n');return;}
int f=0;char ch[20];
if(x<0)putchar('-'),x=-x;
while(x)ch[++f]=x%10+'0',x/=10;
while(f)putchar(ch[f--]);
putchar('\n');
return;
}
const LL mod=1000000007;
int no[maxn],p[maxn],cnt,kth[maxn],mu[maxn],f[maxn],n,m,k,t;
int mul(int x,int y){int res=1;while(y){if(y&1)res=(LL)res*(LL)x%mod;x=(LL)x*(LL)x%mod,y>>=1;}return res;}
int main()
{
t=read(),k=read();
no[1]=f[1]=1;
rep(i,2,lim)
{
if(!no[i])p[++cnt]=i,kth[i]=mul(i,k),f[i]=(-1+kth[i]+mod)%mod;
for(int j=1;j<=cnt&&i*p[j]<=lim;j++)
{
no[i*p[j]]=1;
if(i%p[j]==0){f[i*p[j]]=(LL)f[i]*(LL)kth[p[j]]%mod;break;}
f[i*p[j]]=(LL)f[p[j]]*(LL)f[i]%mod;
}
}
rep(i,1,lim)f[i]=add(f[i]+f[i-1]);
while(t--)
{
n=read(),m=read();if(n>m)swap(n,m);
int ans=0;
for(int l=1,r;l<=n;l=r+1)
{
r=min(n/(n/l),m/(m/l));
ans=(ans+(LL)(n/l)*(LL)(m/l)%mod*(LL)((f[r]-f[l-1]+mod)%mod)%mod)%mod;
}
write(ans);
}
return 0;
}
并不对劲的p4449于神之怒加强版的更多相关文章
- P4449 于神之怒加强版 (莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P4449 给定n,m,k,计算 \(\sum_{i=1}^n \sum_{j=1}^m \mathrm{gc ...
- 洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P4449 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i, ...
- P4449 于神之怒加强版
\(\color{#0066ff}{ 题目描述 }\) 给定n,m,k,计算 \(\sum_{i=1}^n \sum_{j=1}^m \mathrm{gcd}(i,j)^k\) 对1000000007 ...
- 题解 P4449 于神之怒加强版
这道题算是我完完整整推的第一道题,写篇题解纪念一下. 题目 废话不多说,直接开始推式子(给新手准备,过程较详细,大佬可自行跳步),以下过程中均假设 \((n\le m)\),\([d=1]\) 类似于 ...
- 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 241 Solved: 119[Submit][Status][Discu ...
- 【BZOJ4407】于神之怒加强版(莫比乌斯反演)
[BZOJ4407]于神之怒加强版(莫比乌斯反演) 题面 BZOJ 求: \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)^k\] 题解 根据惯用套路 把公约数提出来 \[\sum ...
- BZOJ 4407 于神之怒加强版 (莫比乌斯反演 + 分块)
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1067 Solved: 494[Submit][Status][Disc ...
- bzoj 4407 于神之怒加强版 (反演+线性筛)
于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1184 Solved: 535[Submit][Status][Discuss] D ...
- 【BZOJ4407】于神之怒加强版 莫比乌斯反演
[BZOJ4407]于神之怒加强版 Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行, ...
随机推荐
- PSO(Thepopularity-similarity-oplimization) modol
PSO(Thepopularity-similarity-oplimization) modol 在这篇文章里,我们试图将社交关系构成的网络结构从纷繁复杂的具体场景.细节条件中剥离出来,单单从个体间连 ...
- 【nodejs原理&源码赏析(3)】欣赏手术级的原型链加工艺术
目录 一. 概述 二. 原型链基础知识 三. Worker类的原型链加工 四. 实例的生成 五. 最后一个问题 六. 一些心得 示例代码托管在:http://www.github.com/dashno ...
- B站papi酱、陈一发、李云龙
李云龙-花田错 https://www.bilibili.com/video/av10842071/?from=timeline&isappinstalled=1 李云龙:你猜旅长怎么说? h ...
- 大众车机天宝187A Hack笔记
0×00前言 自从去年买了车,对汽车电子系统的兴趣就上来了.这不,前一阵子逛汽车论坛,发现了有网友将老版本的天宝车机被刷上了2017新帕萨特车机的系统,支持超级蓝牙和苹果CarPlay,百度CarLi ...
- [转]java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- python—networkx:依据图的权重绘图
首先输入边和边的权重,随后画出节点位置.依据权重大小划分实边和虚边 #coding:utf-8 #!/usr/bin/env python """ An example ...
- mac上的xampp出现Access forbidden! You don’t have permission to access the requested object. It is either
一个Joomla!程序,之前是在win上的xampp上运行得非常好的,当我把它拿到mac下面的xampp上去运行的时候,发现有问题,没法运行,报以下的错误: Access forbidden! Yo ...
- Method Swizzling以及AOP编程:在运行时进行代码注入-b
概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为“移花接木 ...
- 基本SCTP套接字编程常用函数
sctp_bindx函数:允许SCTP套接字捆绑一个特定地址子集 #include <netinet/sctp.h> // 若成功返回0,出错返回-1 int sctp_bindx(int ...
- 第六十题(在O(1)时间内删除链表结点)
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点. 思路:将待删除节点下一个节点的数据赋给当前节点.删除下一个节点就可以.