51nod1220 約數之和

2021-08-01 03:04:53 字數 2114 閱讀 4041

首先列出題目要求的式子 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)∑d

|an∑

d|bn

∑a|i

n∑b|

jnaj

b=∑d

=1nμ

(d)∑

d|ad

n∑d|

bdn∑

ad|i

n∑bd

|jna

jb=∑

d=1n

μ(d)

∑a=1

⌊nd⌋

∑b=1

⌊nd⌋

∑i=1

⌊nad

⌋∑j=

1⌊nb

d⌋aj

bdb=

∑d=1

nμ(d

)∑a=

1⌊nd

⌋∑b=

1⌊nd

⌋∑i=

1⌊na

d⌋∑j

=1⌊n

bd⌋a

jd=∑

d=1n

dμ(d

)∑a=

1⌊nd

⌋a⌊⌊

nd⌋a

⌋∑b=

1⌊nd

⌋∑j=

1⌊nb

d⌋j

最後面那兩個

∑ 可以考慮用算貢獻的方法化簡 ∑b

=1⌊n

d⌋∑j

=1⌊⌊

nd⌋b

⌋j=∑

j=1⌊

nd⌋j

⌊⌊nd

⌋j⌋

令d(n

) 表示約數和函式d(

) 的前

n 項和。 d(

n)=∑

i=1n

i⌊ni

⌋ans

=∑d=

1nμ(

d)d(

⌊nd⌋

)2 d

μ(d)

可以杜教篩,

d 則可以小資料線性篩+大資料暴力。

時間複雜度o(

n23)

//杜教篩 

#include

#include

#include

#define maxn 1000005

#define mod 1000000007ll

using namespace std;

typedef long long ll;

ll n, f[maxn+10], d[maxn+10];

int prime[maxn/10+10], mu[maxn+10], pr[maxn+10], prd[maxn+10];

bool mark[maxn+10];

void shai()

mu[i*prime[j]]=-mu[i];

prd[i*prime[j]]=prime[j];}}

for(i=1;i1]+(ll)i*mu[i])%mod, d[i]=(d[i-1]+d[i])%mod;

}ll s1(ll x)

ll getf(ll n)

}ll s

qr(ll x)

ll getd(ll n)

return ans;

}int main()

printf("%lld",(ans+mod)%mod);

return

0;}

51nod1220 約數之和

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

51Nod 1220 約數之和 PE439

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

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