【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛
4407: 于神之怒加强版
Time Limit: 80 Sec Memory Limit: 512 MB
Submit:
241 Solved: 119
[Submit][Status][Discuss]
Description

Input
Output
Sample Input
3 3
Sample Output
HINT
1<=N,M,K<=5000000,1<=T<=2000
Source
Solution
首先变换一下式子:
$$\sum_{d=1}^{n}d^{k}\sum_{i=1}^{n}\sum_{j=1}^{m}\left \lfloor gcd\left ( i,j \right )= d \right \rfloor$$
那么我们设$f\left ( d \right )$表示$gcd\left ( i,j \right )= d$的点对的数目,那么可以莫比乌斯反演得到:
$$f\left ( d \right )= \sum_{x=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\mu \left ( x \right )\left \lfloor \frac{n}{dx} \right \rfloor\left \lfloor \frac{m}{dx} \right \rfloor$$
那么就有:
$$Ans= \sum_{d=1}^{n}d^{k}\times f(d)$$
但这还不够求解,那么令$y= dx$代换一下可以得到:
$$Ans= \sum_{y}^{n}\left \lfloor \frac{n}{y} \right \rfloor\left \lfloor \frac{m}{y} \right \rfloor\sum_{d|y}d^{k}\mu \left ( \frac{y}{d} \right )$$
到这一步就已经可以求解了:
令$g\left ( y \right )= \sum_{d|y}d^{k}\mu \left ( \frac{y}{d} \right )$,发现是积性函数,那么线性筛处理出来即可
然后分块求解即可。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
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;
}
#define maxn 5000010
#define p 1000000007
int T,K,N,M;
long long quick_pow(long long x,int y)
{
long long re=; x=x%p; y%=p;
for (int i=y; i; i>>=,x=x*x%p)
if (i&) re=re*x%p;
return re;
}
bool flag[maxn];long long F[maxn],prime[maxn],cnt,sum[maxn];
void prework()
{
flag[]=; F[]=; sum[]=;
for (int i=; i<maxn; i++)
{
if (!flag[i]) prime[++cnt]=i,F[i]=quick_pow(i,K)-;
for (int j=; j<=cnt && i*prime[j]<maxn; j++)
{
flag[i*prime[j]]=;
if (!(i%prime[j]))
{F[i*prime[j]]=F[i]*quick_pow(prime[j],K)%p;break;}
else F[i*prime[j]]=F[i]*F[prime[j]]%p;
}
sum[i]=sum[i-]+F[i]%p;
}
}
void work(int n,int m)
{
if (n>m) swap(n,m);
long long ans=;
for (int j,i=; i<=n; i=j+)
j=min(m/(m/i),n/(n/i)),
ans+=(sum[j]-sum[i-]+p)%p*(n/i)%p*(m/i)%p,ans%=p;
printf("%lld\n",ans);
}
int main()
{
T=read(),K=read();
prework();
while (T--)
{
N=read(),M=read();
work(N,M);
}
return ;
}
数论题做的巨心累,推了半天,毫无头绪,最后默默看题解....zky学长说这是裸题...
【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛的更多相关文章
- BZOJ 4407: 于神之怒加强版 [莫比乌斯反演 线性筛]
题意:提前给出\(k\),求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)^k\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d|D ...
- bzoj 4407 于神之怒加强版 (反演+线性筛)
于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1184 Solved: 535[Submit][Status][Discuss] D ...
- BZOJ 4407: 于神之怒加强版 莫比乌斯反演 + 线筛积性函数
Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意 ...
- 【bzoj4407】于神之怒加强版 莫比乌斯反演+线性筛
题目描述 给下N,M,K.求 输入 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. 输出 如题 ...
- BZOJ 4407 于神之怒加强版 (莫比乌斯反演 + 分块)
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1067 Solved: 494[Submit][Status][Disc ...
- BZOJ.4407.于神之怒加强版(莫比乌斯反演)
题目链接 Description 求\[\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^K\ \mod\ 10^9+7\] Solution 前面部分依旧套路. \[\begin{ ...
- BZOJ4407: 于神之怒加强版(莫比乌斯反演 线性筛)
Description 给下N,M,K.求 感觉好迷茫啊,很多变换看的一脸懵逼却又不知道去哪里学.一道题做一上午也是没谁了,, 首先按照套路反演化到最后应该是这个式子 $$ans = \sum_{d ...
- bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛
Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...
- BZOJ 3309: DZY Loves Math [莫比乌斯反演 线性筛]
题意:\(f(n)\)为n的质因子分解中的最大幂指数,求\(\sum_{i=1}^n \sum_{j=1}^m f(gcd(i,j))\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d| ...
随机推荐
- JavaWeb学习之Servlet(四)----ServletConfig获取配置信息、ServletContext的应用
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140877.html [正文] 一.ServletConfig:代表当前 ...
- MonoDevelop Debug Unity
环境 Unity 4.3.x MonoDevelop 4.0.1 资料 更新Unity4.3.X之后的版本,MonoDevelop的版本也进行了升级,IDE的界面发生了比较大的改变. 查阅了Unity ...
- Power Builder的学习
新的任务可能要运用PowerBuilder了,对这个名词之前仅是有所耳闻,工作中倒是用过power designer这个优秀的建模工具,出自同一家公司的产品,应该拥有同样的基因,于是上网开始查阅相关资 ...
- 使用c#创建php可以调用的dll
1. 创建一个 C# Class Library ,命名为:ClassLibraryDemo 2. 打开项目的属性,在点选左边的 “Application”(就是第一个tab) , 然后点击 Asse ...
- slidingMenu有时候需要关闭侧边栏
12个页签能往左滑动 但是往右滑动侧边栏就出来了 我们ViewPager的事件被占用了,那么就得关闭侧边栏的事件(第一个页签可以开启) 那么写个方法关闭侧边栏 slidingMenu.setTouch ...
- matlab中textread
今天打算跑下程序,突然发现,真的很烂,不会读入数据,简单的Iris.txt一上午都没读进去,在此对matlab中的textread函数做下总结,textscan函数待续. 本文主要内容引自http:/ ...
- Python类库下载
https://sourceforge.net/projects/pywin32/files/pywin32/ WMI库的安装 下载 http://timgolden.me.uk/python/wmi ...
- textfield控制光标开始位置
// UIView *paddingView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.wi ...
- WiFi QC 自动测试:Qt控制无线路由器
在测试wifi的时候,测试人员一般要使用很多不同型号的AP,并且需要不断地切换Chariot的配置. 这里的思路是致力于提供一个友好的GUI界面来自动控制AP,并且自动控制Chariot进行Throu ...
- html5 canvas 粒子特效
不知不觉就已经好久没写过博客了,自从七月正式毕业后,离开了实习了将近九个月的老东家,进了鼠厂后,做的事都是比较传统的前端活,之前在tpy的时候只管做移动h5的特效以及小游戏,再加上实习所以时间比较充裕 ...