51Nod 1225 餘數之和

2021-07-30 08:49:40 字數 1191 閱讀 5822

acm模版

對於數論只會打表找規律的我來說,我一上來就打了一張表,然後發掘其中的規律……沒法子,腦子跟不上,推不出來規律,只能找規律。

通過這個表我們可以發現:

從第100項到51項是等差數列0~49,base = 1;

從第50項到34項是等差數列0~32,base = 2;

從第33項到26項是等差數列1~22,base = 3;

……所以我們可以發現,這是由項數遞減的若干等差數列構成的,而這個項數滿足n - x = st + base * x,化簡也就是說項數x = (n - st) / (base + 1),這裡需要注意的是向上取整才行,至於為什麼,自己模擬試試就知道了,另外還需要注意的是這裡可能會超 long long,所以需要用到乘法逆元,也就是 2 對 mod 的逆元,因為求等差數列的和時涉及到了乙個除以 2 的操作,在這裡,由於只用到了這乙個逆元,所以直接 const 乙個值表示它即可,也就是 5e8 + 4,gg!

#include 

using namespace std;

const

int mod = 1e9 + 7;

const

int mod_2 = 5e8 + 4;

int main(int argc, const

char * argv)

if ((base + 1) * x != m - st) // 向上取整

ed = st + (x - 1) * base;

res = (res + ((st + ed) % mod * (x % mod)) % mod * mod_2 % mod) % mod;

m -= x;

if (m == 0)

st = (ed + base) % m;

base++;

}for (int i = 1; i <= m; i++)

cout << res << '\n';

return

0;}

51 Nod 1225 餘數之和

基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 f n n 1 n 2 n 3 n n 其中 表示mod,也就是餘數。例如f 6 6 1 6 2 6 3 6 4 6 5 6 6 0 0 0 2 1 0 3。給出n,計算f n 由於結果很大,輸出mod 100000...

51Nod1225餘數之和

題目鏈結 題意 f n n 1 n 2 n 3 n n 其中 表示mod,也就是餘數。例如f 6 6 1 6 2 6 3 6 4 6 5 6 6 0 0 0 2 1 0 3。給出n,計算f n 由於結果很大,輸出mod 1000000007的結果即可。輸入 輸入1個數n 2 n 10 12 輸出 輸...

51nod1225 餘數之和

打表可以看出規律。分塊求就可以了。include include include includeusing namespace std define ll long long ll read const ll mod 1e9 7 const ll tt 5e8 4 int main printf l...