數論 餘數求和

2021-10-20 01:13:21 字數 1585 閱讀 7927

luogu:p2261 [cqoi2007]餘數求和

有的小夥伴看到這道題,第一感覺是這樣的:好簡單。這麼水一道題,不是有手就行? 於是碼出了這樣一段**:

int n,k,ans;

intmain()

printf

("%d\n"

,ans)

;return0;

}

但是很抱歉的是,只能過乙個點。

本題其實用到了整除分塊的一些推論以及等差數列的相關知識。

對於 i

ii屬於[x,

k/(k

/x)]

[x,k/(k/x)]

[x,k/(

k/x)

],k/

ik/i

k/i的值都相等。 例如k=15

,x=9

k=15,x=9

k=15,x

=9則對於i

ii屬於區間[9,

15/(15

/9)]

[9,15/(15/9)]

[9,15/

(15/

9)]即[9,

15]

[9,15]

[9,15]

,k /i

k/ik/

i的值都相等。

等差數列求和公式:(首項+末項)* 項數 /2。

在本題中 由於我們知道 kmo

di=k

−k/i

∗i

k\,mod\,i=k-k/i*i

kmodi=

k−k/

i∗i,因此結果為k∗n

−∑i=

1nk/

i∗

ik*n-\sum_^k/i*i

k∗n−i=

1∑n​

k/i∗

i具體**如下:

#include

#include

#include

#include

#include

#define rg register

#define ll long long

using

namespace std;

inline

intsread()

while

(c>=

'0'&&c<=

'9')

return f*x;

}long

long

int n,k,ans,ans1;

intmain()

else

if(k} ans=ans-ans1;

printf

("%lld\n"

,ans)

;return0;

}

1.記得該開lon

glon

glong\,long

longlo

ng的時候一定要開(我在這卡了半天)。

2.要對數學的基礎知識熟練掌握並能靈活運用。

3.數論相關題目需要在思考的同時大量演算。

LuoguP2261 餘數求和 數論分塊

luogu 我看了一堆大佬的部落格才搞懂數論分塊 數論分塊適用於給定 n,k 求型如 sum left lfloor frac right rfloor f l,r 的式子 可將 o n 的複雜度降至 o sqrt n 首先定義 l 1,r 其次有 r min n,left lfloor frac ...

求和 sum DP 數論

description 一條狹長的紙帶被均勻劃分出了 n 個格仔,格仔編號從 1 到 n。每個格仔上都染了一種顏色colori 用 1,m 當中的乙個整數表示 並且寫了乙個數字numberi。定義一種特殊的三元組 x,y,z 其中x,y,z都代表紙帶上格仔的編號,這裡的三元組要求滿足以下兩個條件 1...

餘數之和 數論分塊

傳送門 給出正整數n和k,計算j n,k k mod 1 k mod 2 k mod 3 k mod n的值。例如j 5,3 3 mod 1 3 mod 2 3 mod 3 3 mod 4 3 mod 5 0 1 0 3 3 7。第一印象肯定是暴力了,但是本題目的資料量太大了,暴力會tle,因此需要...