[BZOJ4407]于神之怒加强版
BZOJ挂了。。。
先把程序放上来,如果A了在写题解吧。
#include<cstdio>
#include<algorithm>
#define N 5000010
#define ll long long
#define mod (int)(1e9+7)
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline int ksm(ll x,ll y)
{
ll p=;
while(y)
{
if(y&)p=p*x%mod;
x=x*x%mod;y>>=;
}
return p;
}
int prime[N],tot,f[N],p[N],k;
bool vis[N];
void pre(int t)
{
f[]=;
for(int i=;i<=t;i++)
{
if(!vis[i])
{
prime[++tot]=i;
p[tot]=ksm(i,k);
f[i]=p[tot]-;
}
for(int j=;j<=tot&&i*prime[j]<=t;j++)
{
vis[i*prime[j]]=;
if(!(i%prime[j]))
{
f[i*prime[j]]=(ll)f[i]*p[j]%mod;
break;
}
f[i*prime[j]]=(ll)f[i]*f[prime[j]]%mod;
}
}
for(int i=;i<=t;i++)
f[i]=(f[i]+f[i-])%mod;
}
int n[],m[],t,maxn;
int main()
{
t=read();k=read();
for(int i=;i<=t;i++)
{
n[i]=read();
m[i]=read();
if(n[i]>m[i])swap(n[i],m[i]);
maxn=max(maxn,n[i]);
}
pre(maxn);
for(int z=;z<=t;z++)
{
int ans=;
for(int i=,j;i<=n[z];i=j+)
{
j=min(n[z]/(n[z]/i),m[z]/(m[z]/i));
ans=(ans+((ll)(f[j]+mod-f[i-])*(n[z]/i)%mod*(m[z]/i)%mod))%mod;
}
printf("%d\n",ans);
}
}
update:
$\sum\limits_{i=1}^n\sum\limits_{j=1}^n\gcd(i,j)^k$
$=\sum\limits_{d=1}^nd^k*\sum\limits_{i=1}^{[\frac nd]}\sum\limits_{j=1}^{[\frac md]}\gcd(i,j)==1$
$=\sum\limits_{d=1}^nd^k*\sum\limits_{i=1}^{[\frac nd]}\sum\limits_{j=1}^{[\frac md]}\sum\limits_{t|i,t|j}\mu(t)$
$=\sum\limits_{d=1}^nd^k*\sum\limits_{t=1}^n\mu(t)*[\frac n{td}]*[\frac m{td}]$
令$x=d*t$
原式=$\sum\limits_{x=1}^n[\frac nx][\frac mx]\sum\limits_{d|x}\mu(\frac xd)*d^k$
后面那个显然是积性函数,可以线性筛。线性筛预处理+分块 时间复杂度$O(n+T*\sqrt n)$
[BZOJ4407]于神之怒加强版的更多相关文章
- BZOJ4407: 于神之怒加强版(莫比乌斯反演 线性筛)
Description 给下N,M,K.求 感觉好迷茫啊,很多变换看的一脸懵逼却又不知道去哪里学.一道题做一上午也是没谁了,, 首先按照套路反演化到最后应该是这个式子 $$ans = \sum_{d ...
- BZOJ4407 于神之怒加强版 - 莫比乌斯反演
题解 非常裸的莫比乌斯反演. 但是反演完还需要快速计算一个积性函数(我直接用$nlogn$卷积被TLE了 推荐一个博客 我也不想再写一遍了 代码 #include<cstring> #in ...
- 【BZOJ4407】于神之怒加强版(莫比乌斯反演)
[BZOJ4407]于神之怒加强版(莫比乌斯反演) 题面 BZOJ 求: \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)^k\] 题解 根据惯用套路 把公约数提出来 \[\sum ...
- 【BZOJ4407】于神之怒加强版 莫比乌斯反演
[BZOJ4407]于神之怒加强版 Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行, ...
- 【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 ...
- bzoj 4407 于神之怒加强版 (反演+线性筛)
于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1184 Solved: 535[Submit][Status][Discuss] D ...
- 【反演复习计划】【bzoj4407】于神之怒加强版
#include<bits/stdc++.h> #define N 5000010 #define yql 1000000007 using namespace std; typedef ...
- 【bzoj4407】于神之怒加强版 莫比乌斯反演+线性筛
题目描述 给下N,M,K.求 输入 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. 输出 如题 ...
随机推荐
- TransactionScope 之分布式配置
.Net开发过程中,涉及多个数据库和不同数据库的分布式事务(Distributed Transaction)开发,有时会碰到“与基础事务管理器的通信失败”的错误.导致这个错误一般有下列三个原因:1) ...
- “基础提供程序在Open上失败”
本来布置在IP为[x.x.x.x]的WCF服务好好的,但是今天突然就有问题了,一调用报错"基础提供程序在Open上失败"... 服务器上的有问题,先试试本地的服务能不能用吧,连的都 ...
- [Linux] 账户管理命令(一)
用户和用户组 Linux用户组的所有信息都存放在/etc/group文件中.具有某种共同特征的用户集合起来就是用户组(Group).用户组(Group)配置文件主要有 /etc/group和/etc/ ...
- JavaScript学习链接
Js中this的用法:http://www.cnblogs.com/RitaRichard/archive/2011/10/14/2212161.html JavaScript\ActionScrip ...
- 【阮一峰】深入研究URL编码问题及JavaScript相应的解决方案
作者: 阮一峰 日期: 2010年2月11日 一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上 ...
- 聊聊Azure的安全性
本来没打算写这篇博文,毕竟感觉太理论化,不像做技术的人应该写的东西,但是作为一名售前,发现很多不了解Azure的客户,上来的第一个问题竟然就是Azure如何保证客户数据的安全性,我清楚记得我第一次被问 ...
- jenkins自动化构建iOS应用配置过程中遇到的问题
最近配置jenkins来自动构建iOS应用,期间遇上不少问题.在这里分享给大家,也给自己留个底,方便下次解决问题. 首先说明下基本情况,我们因为部署jenkins的机器不是Mac,所以不能安装Xcod ...
- linux source
清华TUNA镜像源https://mirrors.tuna.tsinghua.edu.cn/ 中科大USTC镜像源 https://mirrors.ustc.edu.cn/ ali http://mi ...
- Java 中的内存泄露
1.当你完成对流的读写时,应该通过调同close方法来关闭它,这个调用会释放掉十分有限的系统资源,否则,如果一个应用程序打开了过多的流而没有关闭,那么系统资源将被耗尽.
- r-cnn学习(八):minibatch
这段代码包括由输入图片随机生成相应的RoIs,并生成相应的blobs,由roidb得到相应的 minibatch.其代码如下. # ---------------------------------- ...