bzoj 4916 神犇和蒟蒻

2021-08-19 18:21:20 字數 1593 閱讀 7887

description

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

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

input

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

output

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

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

sample input

1 sample output

1 1

hint

source

by monster_yi

首先考慮乙個性質即φ(

i2)=

φ(i)

×iφ (i

2)=φ

(i)×

i這個就分解下質因數直接按照他給的 不過有變化 變化的只不過是影響寫在最前面了 然後就可以看一些常見套路了 考慮 將他仍然寫成乙個卷積的形式 設f函式表示φ(

i2) φ(i

2)

那麼可以寫出式子∑d

|nf[

nd]×

g[d]

∑ d|

nf[n

d]×g

[d

]設g為常函式 那麼將f開啟可以發現上下的d消去了 最後每一項都剩下乙個n*

φ φ

不妨將這個n提取出 然後就變成了φ×

1=id

φ ×1

=i

d於是前面的式子瞬間做成n^2 然後就杜教篩一下討論下即可 具體參照之前的blog

#include

#include

#include

#define ll long long

using namespace std;

const int mod=1e9+7;

const int n=2e6+10;

inline char gc()

return

*s++;

}inline int

read()

while(isdigit(ch)) x=x

*10+ch-'0',ch=gc();

return

x*f;

}int

s[n],prime[n],tot,n,phi[n],inv6;

bool not_prime[n];

inline int ksm(ll b,int t)

inline void inc(int &x,int v)

inline void dec(int &x,int v)

inline int calc(int

x)return

s[n/x]=tmp;

}int main()else phi[prime[j]*i]=phi[i]*phi[prime[j]];

}}phi[1]=1;for (int i=2;i<=2e6;++i) phi[i]=(ll)phi[i]*i

%mod,inc(phi[i],phi[i-1]);

inv6=ksm(6,mod-2);printf("%d\n",calc(n));

return

0;}

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...