LOJ6682 夢中的數論(min 25篩)

2021-09-25 18:20:23 字數 1622 閱讀 6196

首先題目裡面的式子乍一看很扯,實際上我們發現對於i

ii,它的每一對約數都出現了一次並且被計算,則實際上我們要求的是:ans

=∑i=

1n(d

(i)2

)=12

(∑i=

1nd2

(i)−

∑i=1

nd(i

))

ans=\sum_^n\\=\frac(\sum_^nd^2(i)-\sum_^nd(i))

ans=i=

1∑n​

(2d(

i)​)

=21​

(i=1

∑n​d

2(i)

−i=1

∑n​d

(i))

而∑ i=

1nd(

i)

\sum_^nd(i)

∑i=1n​

d(i)

直接整除分塊算就行了。

d 2(

i)

d^2(i)

d2(i

)就是乙個積性函式,直接上min_25篩即可。

**:

#include

#define ll long long

#define re register

#define cs const

cs int mod=

998244353

,inv2=mod+

1>>1;

inline

intadd

(int a,

int b)

inline

intdec

(int a,

int b)

inline

intmul

(int a,

int b)

inline

intpower

(int a,

int b,

int res=1)

inline

void

inc(

int&a,

int b)

inline

void

dec(

int&a,

int b)

inline

in***

(ll a)

inline

intsqr

(int a)

cs int n=

1e5+7;

ll n;

int lim,tot,p[n]

;int f1[n]

,f2[n]

;inline

void

init()

}inline

intsolve

(ll n,

int i)

}return ans;

}signed

main()

std::cout<<

mul(

dec(

solve

(n,1)+

1,ans)

,inv2)

<<

"\n"

;return0;

}

LOJ 6682 夢中的數論(min 25篩)

比較簡單的一道題 我們可以比較明顯的看出,我們要求的式子是乙個有實際意義的式子 如果把 i 分解質因數,把j k換成k k j 那麼題目就是在求i的約數的無序對數,即 然後問題就轉化為了求 直接上兩個min 25篩 結果考試的時候把min 25寫錯了 各種錯 預處理 遞迴s a pw,i 1 一直沒...

loj6053 簡單的函式 min25篩

對於100 的資料,n 1e10 首先,考慮質數,即c 1的情形,f 2 3,其餘f p p 1,這裡就先統一f p p 1處理,然後對第乙個質數特判加2 由於f p p 1,所以這裡拆成兩部分,g用來算前面一項,質數p的字首和,h用來算後面一項,質數的個數即1的字首和 兩個陣列求法是一樣的,然後第...

Loj 6053 簡單的函式 Min25篩

定義乙個積性函式 f p c p xor c 求 sum nf i 異或這個東西不太好搞,要考慮怎麼求出 g 陣列。當 p 為質數時 f p p 1 所以我們讓 g n sum n i in pri i 1 就好了。然後因為 i 1 不是完全積性函式,所以拆成 i 和 1 分開來就好了。然後因為 f...