整理的算法模板合集: ACM模板
实际上是一个全新的精炼模板整合计划
G. Grisaia(灰色的果实好耶《灰色的果实(The Fruit of Grisaia)》)
Weblink
https://www.oj.swust.edu.cn/problem/show/2810
Problem
计算:
a n s = ∑ i = 1 n ∑ j = 1 i ( n m o d ( i × j ) ) ans =\sum^n_{i=1}\sum^i_{j=1} (n\ mod (i \times j)) ans=i=1∑nj=1∑i(n mod(i×j))
其中 T ≤ 5 , n ≤ 1 0 11 T\le 5, n\le 10^{11} T≤5,n≤1011
Solution
使用模的展开式将上述和式展开后,显然套路枚举 k = i × j k=i\times j k=i×j,由于 n ≤ 1 0 11 n\le10^{11} n≤1011,杜教筛即可。
筛出:
f ( x ) = x × d ( x ) g ( x ) = x × μ ( x ) f(x)=x\times d(x)\\g(x)=x \times \mu(x) f(x)=x×d(x)g(x)=x×μ(x)
然后整除分块即可。
Hint
注意 n ≤ 1 0 11 n\le10^{11} n≤1011,中间多处会爆 long long
,强转成 __int128
即可。
(因为这个wa了8发hhh,五颜六色的)
Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll __int128