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