刷題 BZOJ 4916 神犇和蒟蒻

2022-05-25 10:54:16 字數 1188 閱讀 1260

很久很久以前,有乙隻神犇叫yzy;

很久很久之後,有乙隻蒟蒻叫lty;

請你讀入乙個整數n;1<=n<=1e9,a、b模1e9+7;

請你輸出乙個整數a=\sum_^n;

請你輸出乙個整數b=\sum_^n;

11完全不知道第一問是用來幹嘛的。。。。反正都是1

第二問,顯然,\(\varphi(i^2)=i\times\varphi(i)\)

於是就是求,\(\sum_^ni\times\varphi(i)\)

套用杜教篩的式子,\(h=f*g\) ,在 \(f*g\) 中,\(\sum_d\times\varphi(d)\times g(\frac)\)

一種想法是試著把 \(\frac\) 給去掉,那麼嘗試著將 \(g\) 定為 \(id\)

那麼 \(f*g\) 就變成了 \(n\sum_\varphi(d)=n^2\)

帶回杜教篩最後的那個式子,得到,\(s(n)=\sum_i^2-\sum_^nis(\lfloor\frac\rfloor)\)

杜教篩求就好了

#include#define ui unsigned int

#define ll long long

#define db double

#define ld long double

#define ull unsigned long long

const int maxn=10000000+10,mod=1e9+7;

int n,vis[maxn],prime[maxn],cnt,phi[maxn];

ll s[maxn],inv6;

std::mapm;

templateinline void read(t &x)

templateinline void write(t x,char ch='\0')

templateinline void chkmin(t &x,t y)

templateinline t min(t x,t y)

inline void init()

return res;

}inline ll s(int x)

return (1ll*x*(x+1)%mod*(2*x+1)%mod*inv6%mod-res+mod)%mod;

}int main()

BZOJ 4916 神犇和蒟蒻

很久很久以前,有乙隻神犇叫yzy 很久很久之後,有乙隻蒟蒻叫lty 請你讀入乙個整數n 1 n 1e9,a b模1e9 7 請你輸出乙個整數a sum n 請你輸出乙個整數b sum n 1by monster yi 杜教篩 推導詳見 其中ni2和ni6分別是2和6的逆元,是用快速冪求出來的 inc...

bzoj4916 神犇和蒟蒻

求 i 1n i2 和 i 1n i2 n 1e9,答案對1e9 7取模 被題目名字和ac人數騙進來,一看題還嚇了一跳 難道這是什麼最新的操作.jpg 然後仔細看了一眼題 mdzz這不是隨便做嗎?的話除了i 1不是全部為0嗎?的話把式子拆出來就可以發現 i2 i i 然後就直接上杜教篩就好了。隱藏水...

bzoj4916 神犇和蒟蒻

首先看第乙個式子,根據莫比烏斯函式的性質可知,當i 1時,i 1 其它都是0.所以輸出1 然後看第二個式子。根據尤拉函式的性質,平方的部分多出來的質因數已經出現過,所以式子變成 n i 1i i 這個用杜教篩來求。include include include include using names...