首先題目裡面的式子乍一看很扯,實際上我們發現對於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
∑nd
2(i)
−i=1
∑nd
(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...