[BZOJ4407]於神之怒加強版
題面戳我
Description
給下N,M,K.求
\[\sum_{i=1}^{n}\sum_{j=1}^{m}\gcd(i,j)^k\quad(mod\quad1e9+7)\]
Input
輸入有多組資料,輸入資料的第一行兩個正整數T,K,代表有T組資料,K的意義如上所示,下面第二行到第T+1行,每行為兩個正整數N,M,其意義如上式所示。
Output
如題
Sample Input
1 2
3 3
Sample Output
20
HINT
1<=N,M,K<=5000000,1<=T<=2000
sol
首先單組資料\(O(n)\)的都會噻,就不講了。(就是內外數論分塊\(O(\sqrt n*\sqrt n)=O(n)\)
這種方法化到最後的答案式應該是
\[ans=\sum_{d=1}^{n}d^k\sum_{i=1}^{n/d}\mu(i)\lfloor\frac n{di}\rfloor\lfloor\frac m{di}\rfloor\]
我們現在令\(T=di\),然後考慮分別計算每一個\(\lfloor\frac nT\rfloor\lfloor\frac mT\rfloor\)對答案的貢獻
\[ans=\sum_{T=1}^{n}\lfloor\frac nT\rfloor\lfloor\frac mT\rfloor*\sum_{d|T}d^k\mu(\frac Td)\]
(手玩一下發現就是這樣的)
前面那一坨顯然還是\(O(\sqrt n)\)
\[h(T)=\sum_{d|T}d^k\mu(\frac Td)\]
是一個積性函式。所以線性篩出來後維護一個字首和即可。
code
這份程式碼比yyb的慢了整整一倍。
原因是我已經被int溢位給搞怕了所以全開long long(是全開!)
所以說如果你想像yyb 這種港記跑得一樣快的話請使用int型別並在適當的地方加上1ll*
。
我不會說我因為ans沒有清零WA了兩次的
#include<cstdio> #include<algorithm> using namespace std; #define ll long long const ll N = 5000005; const ll maxn = 5000000; const ll mod = 1e9 + 7; ll gi() { ll x=0,w=1;char ch=getchar(); while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar(); if (ch=='-') w=0,ch=getchar(); while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); return w?x:-x; } ll fastpow(ll a,ll b) { ll s=1; while (b) { if (b&1) s=s*a%mod; a=a*a%mod;b>>=1; } return s; } ll t,k,n,m,pri[N],tot,zhi[N],low[N],h[N],ans; void Mobius() { zhi[1]=h[1]=low[1]=1; for (ll i=2;i<=maxn;i++) { if (!zhi[i]) low[i]=pri[++tot]=i,h[i]=(fastpow(i,k)-1+mod)%mod; for (ll j=1;j<=tot&&i*pri[j]<=maxn;j++) { zhi[i*pri[j]]=1; if (i%pri[j]==0) { low[i*pri[j]]=low[i]*pri[j]; if (low[i]==i) h[i*pri[j]]=h[i]*(h[pri[j]]+1)%mod; else h[i*pri[j]]=h[i/low[i]]*h[low[i]*pri[j]]%mod; break; } low[i*pri[j]]=pri[j]; h[i*pri[j]]=h[i]*h[pri[j]]%mod; } } for (ll i=1;i<=maxn;i++) h[i]=(h[i]+h[i-1])%mod; } int main() { t=gi();k=gi(); Mobius(); while (t--) { n=gi();m=gi();ans=0; if (n>m) swap(n,m); ll i=1; while (i<=n) { ll j=min(n/(n/i),m/(m/i)); ans=(ans+(h[j]-h[i-1]+mod)%mod*((n/i)*(m/i)%mod)%mod)%mod; i=j+1; } printf("%lld\n",ans); } return 0; }
相關推薦
BZOJ4407: 於神之怒加強版
register 然而 script fin sin 什麽 load mil ati 4407: 於神之怒加強版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 779 Solved: 368[Submit][Stat
BZOJ4407: 於神之怒加強版(莫比烏斯反演 線性篩)
idt col wap std break src cst line ace Description 給下N,M,K.求 感覺好迷茫啊,很多變換看的一臉懵逼卻又不知道去哪裏學。一道題做一上午也是沒誰了,, 首先按照套路反演化到最後應該是這個式子 $
[bzoj4407] 於神之怒加強版
Description 給出N,M,K.求 Input 輸入有多組資料,輸入資料的第一行兩個正整數T,K,代表有T組資料,K的意義如上所示,下面第二行到第T+1行,每行為兩個正整數N,M,其意義如上式所示。 Output 如題 Sample Input 1 2 3 3 Sample Ou
[BZOJ4407]於神之怒加強版-題解
【題目地址】 題意簡述 給定 T , K
[BZOJ4407]於神之怒加強版
題面戳我 Description 給下N,M,K.求 \[\sum_{i=1}^{n}\sum_{j=1}^{m}\gcd(i,j)^k\quad(mod\quad1e9+7)\] Input 輸入有多組資料,輸入資料的第一行兩個正整數T,K,代表有T組資料,K的意義如上所示,下面第二行到第T+1行,每行為兩
bzoj4407:於神之怒加強版
online digi spa ons 函數 swa 做了 如何 rim 傳送門 這個題真的也是有點難度啊(應該是因為我太菜了) \[ ans=\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)^k\\] 可以設 \[ f(d)=\sum_{i=1}^
【BZOJ4407】於神之怒加強版
i++ algorithm tchar 積性函數 isdigit ffffff sdi prim end 題面 題目分析 \[ \begin{split} \sum\limits_{i=1}^n\sum\limits_{j=1}^mgcd(i,j)^k&=\sum
BZOJ 4407 於神之怒加強版
次方 由於 void end break blank zoj 鏈接 freopen 題目鏈接:於神之怒加強版 這個式子還是很妙的,只是我已經思維僵化了 \begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^k \\
●BZOJ 4407 於神之怒加強版
ios eve floor min -- aps d+ post static 題鏈: http://www.lydsy.com/JudgeOnline/problem.php?id=4407 題解: 莫比烏斯反演 直接套路化式子 $\begin{align*}A
bzoj 4407 於神之怒加強版 (反演+線性篩)
ring cit std content gre png info 線性 += 於神之怒加強版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1184 Solved: 535[Submit][Status][Disc
BZOJ#4407. 於神之怒加強版
預處理 code line scrip scanf 約束 eight spa 只需要 4407: 於神之怒加強版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1302 Solved: 582 Descriptio
bzoj 4407 於神之怒加強版 —— 反演+篩積性函式
題目:https://www.lydsy.com/JudgeOnline/problem.php?id=4407 推導如這裡:https://www.cnblogs.com/clrs97/p/5191506.html 然後發現 \( F(D) \) 是一個積性函式,可以篩質數的同時篩出來; 首先,單個質
bzoj 4407 於神之怒加強版——反演
題目:https://www.lydsy.com/JudgeOnline/problem.php?id=4407 \( ans = \sum\limits_{D=1}^{min(n,m)}\frac{n}{D}*\frac{m}{D}\sum\limits_{d|D}d^{k}\mu (\frac{D}{d
bzoj 4407 於神之怒加強版 —— 反演+篩積性函數
targe ret scan 出現 space lse class cst www. 題目:https://www.lydsy.com/JudgeOnline/problem.php?id=4407 推導如這裏:https://www.cnblogs.com/clrs97/
【於神之怒加強版】
求 \[\sum_{i=1}^N\sum_{j=1}^M(i,j)^k\] 多組詢問,但是每次的\(k\)都是不變的 先是套路 \[f(n)=\sum_{i=1}^N\sum_{j=1}^M[(i,j)=n]\] \[F(n)=\sum_{n|d}f(d)=\left \lfloor \frac{N
P4449 於神之怒加強版 (莫比烏斯反演)
好的 its name bits sum namespace 更新 turn ans [題目鏈接] https://www.luogu.org/problemnew/show/P4449 給定n,m,k,計算 $\sum_{i=1}^n \sum_{j=1}^m \math
bzoj 4407: 於神之怒加強版【莫比烏斯反演+線性篩】
isp space names bre esp clas ios getch [1] 看著就像反演,所以先推式子(默認n<m): \[ \sum_{d=1}^{n}d^k\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d] \] \[ =\sum
Java成神之路(2018版)
一、基礎篇 1. Java基礎知識 知識點 連結地址 Java快速入門 資源連結 IntelliJ IDEA教程 資源連結 JAVA程式設計思想指導 資源連結 Java8新特性 資源連結 2. Java Web 知識點 連結地址 Java Web進階:資料庫與My
深度搜索之(加強版)序號
在之前基本款程式碼裡使用visited陣列來區分頂點,也就是visited[x]==true表示x頂點已經訪問過,visited[x]==false表示還沒訪問過x頂點。加強版中使用”顏色”來區分頂點,除此之外
Java成神之路(2018版)
一、基礎篇 1. Java基礎知識 知識點 連結地址 Java快速入門 資源連結 IntelliJ IDEA教程 資源連結 JAVA程式設計思想指