[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,其意义如上式所示. 输出 如题 ...
随机推荐
- js闭包的作用域以及闭包案列的介绍:
转载▼ 标签: it js闭包的作用域以及闭包案列的介绍: 首先我们根据前面的介绍来分析js闭包有什么作用,他会给我们编程带来什么好处? 闭包是为了更方便我们在处理js函数的时候会遇到以下的几 ...
- I() 方法
I()方法的介绍及使用: http://www.jb51.net/article/51213.htm
- 如何删除PHP数组中的元素,并且索引重排(unset,array_splice)?
如果要在某个数组中删除一个元素,可以直接用的unset,但是数组的索引不会重排: <?php $arr = array('a','b','c','d'); unset($arr[1]); pri ...
- 【Alpha版本】冲刺-Day10
队伍:606notconnected 会议时间:11月18日 会议总结 张斯巍(433) 今天安排:完成剩余界面的设计,小修小补 完成度:100% 遇到的问题:无 感想:因为自己是负责界面美工部分的, ...
- iphone的click导致div变黑
-webkit-tap-highlight-color这个属性只用于iOS (iPhone和iPad).当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就会出现一个半透明的灰色背 ...
- 探讨兼容IE低版本的PC端响应式布局
http://www.jiangweishan.com/article/lowIeResposive.html 响应式布局,oh my god!!有点醉了,感觉是老生常谈的话题了.虽然已经谈过很多了, ...
- 批量删除 svn文件
windows下批量删除SVN的方法 ============================ 在.svn的同级目录,也就是项目的根目录 新建文件 killsvn.bat 输入内容: @echo on ...
- espcms特殊标签
内页banner图从后台调用分类图片 <div style="background:url({%$rootdir%}{%find:type class=$type.topid out= ...
- 虚拟机ping不通主机,但是主机可以ping通虚拟机
http://chris2013.blog.51cto.com/6931081/1209278
- Unity 3D 我来了