51Nod 1220 約數之和 PE439

2021-07-24 16:31:59 字數 1804 閱讀 9306

∂(

i)表示i的約數和 ∑n

i=1∑

nj=1

∂(ij

) =∑

ni=1

∑nj=

1∑w|

i∑v/

jwv∗

∑d|w

,d|(

i/v)

u(d)

我們嘗試把d提前 會發現有 =∑

nd=1

d∗u(

d)(∑

(n/d

)i=1

∂(i)

)2後面(∑

(n/d

)i=1

∂(i)

)2可以看作f(

n/d)

對於∑(

n/d)

i=1∂

(i) 我們可以小資料預處理&&大資料o(

n0.5

) 暴力

那麼我們有 =∑

nd=1

d∗u(

d)∗f

(n/d

) 現在我們只需要求出∑n

d=1d

∗u(d

) 即可 設∑

nd=1

d∗u(

d)=s

(n) 我們給前式卷上乙個id

可得 s(n

)=1−

∑nd=

2d∗s

(n/d

) 好了 完美解決

如果你要交pe的話。。

祝你好運

由於pe模數原因。。我和另乙個同學花了乙個晚上找**爆了

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

char c;

inline

void read(ll &a)

const

ll mod=(int)1e9,maxn=(int)3e7+1;

bool check[maxn];

int mu[maxn],prime[maxn],tot,min[maxn],siz[maxn],s[maxn];

inline

int add(int x,int y)

inline

int mul(int x,int y)

inline

int a(ll x)

inline

int cn(ll x,ll y)

mapint >m;

int mu(ll x)

return m[x]=add(1,mod-res);

}map

int >c;

int calc(ll x)

return c[x]=mul(res,res);

}int s(ll x)

return res;

}void out(int x)

int main()

min[k]=prime[j];

siz[k]=prime[j];

mu[k]=-mu[i];

s[k]=s[i]*(prime[j]+1);

}mu[i]=mul(mu[i],i);

mu[i]=add(mu[i],mu[i-1]);

}for(ll i=1;i1]);

for(ll i=1;i1e11));

return

0;}

51nod1220 約數之和

首先列出題目要求的式子 an s i 1n j 1n d ij an s i 1n j 1n a i b j ajb a,b 1 你問我為啥?我也不知道 an s i 1n j 1n a i b j ajb d a b d d 1 n d d an d bn a in b j najb d 1n d...

51nod1220 約數之和

覆盤 bindir0 講的數論清真題,寫一篇題解來禍害自己。給定 n 求 sum sum sigma i cdot j 結果對 10 9 7 取模。2 leq n leq 10 9 無腦轉化式子 打表 無腦亂卷函式 不用推式子!按照一貫的套路,把 sigma 換一種寫法,但是注意 sigma 注意有...

51nod 1040 最大公約數之和

1040 最大公約數之和 rihkddd 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 給出乙個n,求1 n這n個數,同n的最大公約數的和。比如 n 6 1,2,3,4,5,6 同6的最大公約數分別為1,2,3,2,1,6,加在一起 15 input 1個數n ...