傳送門:
【題解】
推一波公式
你還是需要前置技能:
那麼好像可以o(tnlogn)直接暴力啊!
當然是兩遍根號分塊變成o(tn)啊
好訊息過不去。
當你莫比烏斯反演發現複雜度不對的話怎麼辦?繼續瞎**化簡!
令x=pd,那麼有
哎這個式子看起來很和善
後面那個好像是積性函式(逃
那麼線性篩就行啦!!!
問題是怎麼篩呢。我們把每個因數分開考慮後發現。
如果這個因數i只出現一次,貢獻顯然為(i的k次方-1),這可以直接寫出來的qwq
如果出現了多次,我們發現只有mu(1)和mu(i)是有值的,所以只考慮這兩項,寫出來發現是在前面的基礎上乘上了(i的k次方)
於是就能篩啦!
# include # includeview code# include
//# include
using
namespace
std;
typedef
long
long
ll;typedef
long
double
ld;typedef unsigned
long
long
ull;
const
int m = 5e5 + 10
;const
int mod = 1e9+7
;# define rg register
# define st
static
intn, m, k;
const
int f = 5000000
;bool isnp[f + 10
];int p[f/3], pn=0
;int f[f + 10], s[f/3
];inline
int pwr(int a, int
b)
return
ret;
}inline
void
sieve()
for (int j=1; j<=pn && i*p[j]<=f; ++j)
f[i*p[j]] = 1ll * f[i] * f[p[j]] %mod;}}
for (int i=1; i<=f; ++i)
}inline
void
sol()
printf(
"%d\n
", ans);
}int
main()
bzoj 4407 於神之怒加強版
time limit 80 sec memory limit 512 mb submit 624 solved 297 submit status discuss 給下n,m,k.求 輸入有多組資料,輸入資料的第一行兩個正整數t,k,代表有t組資料,k的意義如上所示,下面第二行到第t 1行,每行為兩...
bzoj 4407 於神之怒加強版
給下n,m,k.求 輸入有多組資料,輸入資料的第一行兩個正整數t,k,代表有t組資料,k的意義如上所示,下面第二行到第t 1行,每行為兩個正整數n,m,其意義如上式所示。如題1 2 3 3 20感覺是道比較水的數論題?提個d k隨手莫比烏斯反演一下,再把 跟d k放在一起,預處理出來就好了。瑪雅,1...
bzoj4407 於神之怒加強版
懵逼烏斯反演裸題 畫完柿子只要預處理s i sigema d i d u i d d k 線性篩它一手 i prime j 0,我們換種表示方法,設i x p q,對於s i 有貢獻的d,只能具有q或q 1個p,而對於i prime j 也就是x p q 1 來說,有貢獻的d是具有q 1或q個p的。...