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,因此需要...