bzoj 2956 模積和 數論

2022-04-30 06:15:06 字數 1374 閱讀 8506

求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j。

第一行兩個數n,m。

乙個整數表示答案mod 19940417的值

3 41

樣例說明

答案為(3 mod 1)*(4 mod 2)+(3 mod 1) * (4 mod 3)+(3 mod 1) * (4 mod 4) + (3 mod 2) * (4 mod 1) + (3 mod 2) * (4 mod 3) + (3 mod 2) * (4 mod 4) +

(3 mod 3) * (4 mod 1) + (3 mod 3) * (4 mod 2) + (3 mod 3) * (4 mod 4) = 1

資料規模和約定

對於100%的資料n,m<=10^9。

————————————————————————————————

$這道題\space 就很複雜qaq$

$我們先不考慮 i==j 的情況 $

$題目等價於 \sum _ ^n n-\lfloor \frac \rfloor*i$

$可以轉換為 n^2-\sum _ ^n \lfloor \frac \rfloor*i$

$現在我們可以來考慮i==j的情況了 $

$這個東西我們可以變成 \sum_^ (n-\lfloor \frac \rfloor *i)*(m-\lfloor \frac \rfloor)$

$我們可以把他拆出來$

$變成k*n*m-m\sum_^k \lfloor \frac \rfloor*i-n\sum_^k \lfloor \frac \rfloor*i + \sum_^k \lfloor \frac \rfloor *\lfloor \frac \rfloor$

$這樣就可以ac辣 $

#include#include

#include

#define ll long long

using

std::min;

const

int mod=19940417,p=3323403

;int

read()

while(c>='

0'&&c<='9')

return ans*f;

}ll n,m;

ll calc(ll n,ll k)

ll f(ll x)

intmain()

printf(

"%lld\n

",(ans+mod)%mod);

return0;

}

view code

tips 求類似 $\sum _ ^n \lfloor \frac \rfloor*i$

我們可以利用程式內calc的寫法就可以辣2333

bzoj2956 模積和(數論)

先算出無限制的情況,再減去i j的情況。無限制的情況很好算,有限制的情況需要將式子拆開。注意最後的地方要用平方和公式,模數 1是6的倍數,於是逆元就是 模數 1 6 include include include include define mod x x mod?x mod x using na...

bzoj2956 模積和 數論

題目描述 求 n mod i m mod j 其中1 i n,1 j m,i j。輸入第一行兩個數n,m。輸出乙個整數表示答案mod 19940417的值 樣例輸入 3 4樣例輸出1題解 數論 分塊 由於直接求i j的情況比較難搞,所以我們可以先求出i可以等於j的和,然後再減去i等於j時的情況。也就...

bzoj2956 模積和 (分塊)

原題位址 題意 求 n mod i m mod j 其中1 i n,1 j m,i j。答案 mod 19940417 資料範圍 n,m 10 9 題解 n i 1 mj 1 nm odi mm odj i j ni 1 mj 1 nmod i mmod j min n,m i 1 nm odi m...