51nod 3038 數列求和

2021-10-21 02:21:38 字數 961 閱讀 1923

題目鏈結

題意:

給定兩個數n

nn和k

kk,求∑i=

1nik

mo

d10007

\sum_^ni^k\ mod\ 10007

∑i=1n​

ikmo

d100

07的值題解:

容易發現直接暴力列舉的時間複雜度是o(n

logn

)o(nlogn)

o(nlog

n),而n

nn的資料範圍比較大,因此暴力不行。

我們可以考慮到,這裡的模數10007比較小,因此,我們可以從每個數模10007的餘數下手。利用這個同餘,我們發現1k,

10008k

,20015k

,…

%10007

1^k,10008^k,20015^k,\dots\%10007

1k,100

08k,

2001

5k,…

%100

07的值是相等的。可以發現,每隔10007個數就會出現乙個同餘的數,可以得到證明。因此,我們這裡可以直接列舉餘數,然後找出每個餘數出現次數即可得到最後的答案。

實現細節見**:

#include

using

namespace std;

typedef

long

long ll;

ll qpow

(ll a, ll b)

a =(a * a)

%10007

; b >>=1;

}return ans;

}int

main()

cout << ans << endl;

}return0;

}

51nod 1225 餘數求和(分塊)

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的結果即可。input 輸入1個數n 2 n 10 12 output 輸出...

51nod 1081 子段求和

1081 子段求和 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出乙個長度為n的陣列,進行q次查詢,查詢從第i個元素開始長度為l的子段所有元素之和。例如,1 3 7 9 1,查詢第2個元素開始長度為3的子段和,1 1。3 7 9 19,輸出19。input 第1行 ...

51NOD 1081 子段求和

1081 子段求和 給出乙個長度為n的陣列,進行q次查詢,查詢從第i個元素開始長度為l的子段所有元素之和。例如,1 3 7 9 1,查詢第2個元素開始長度為3的子段和,1 1。3 7 9 19,輸出19。input 第1行 乙個數n,n為陣列的長度 2 n 50000 第2 至 n 1行 陣列的n個...