CQOI2007 餘數求和

2022-05-05 18:03:08 字數 955 閱讀 8059

傳送門

或許這也算是道神仙題?

題目描述非常直白,我們把式子轉化一下,其實就是求n*k - ∑(k/i) * i。

而k/i是可以使用除法分塊來做的……假設t = k / i,如果t = 0,那麼它的末端就是n,這個很顯然,如果不等於0的話,那麼末端就是k / t。

之後我們就神奇的過了這道題……

**極短。

#include#include

#include

#include

#include

#include

#include

#include

#define pb push_back

#define rep(i,a,n) for(int i = a;i <= n;i++)

#define per(i,n,a) for(int i = n;i >= a;i--)

#define enter putchar('\n')

using

namespace

std;

typedef

long

long

ll;const

int m = 40005

;const

int n = 2000005

;const

int inf = 1000000009

;const ll mod = 51123987

;ll read()

while(ch >= '

0' && ch <= '9'

)

return ans *op;

}ll n,k,ans,l = 1

,r,t;

intmain()

printf(

"%lld\n

",n * k -ans);

return0;

}

CQOI2007 餘數求和

求 ans k 1 k 2 k n 這題目應該算是數論裡比較簡單的了 求 ni 1 kmod i i 1nkm od i我們知道 a b a b a b 即 ni 1 kmod i n i 1 k i k i n k ni 1 i k i i 1nkm odi i 1 n k i k i n k i...

CQOI2007 餘數求和

題面 這道題用到了數論分塊 首先什麼是數論分塊 顧名思義就是分塊在數論上的應用 不過非常神奇的一點是你如果不會分塊但你還是可以會數論分塊的 所求為 i 1nkm od i sum k mod i i 1 n kmod i將這個式子改為 i 1nk i ki sum k i left lfloor f...

CQOI2007 餘數求和

給出n,k求k 1 n每乙個數的和 首先將原始式子變形成為nk k 1 1 k 2 2.k n n 此處的除法都是向下取整,也就是說不可以使用運算律了。那麼我們通過簡化式子,得到了乙個不能用運算律的式子。此時我們發現不能暴力去算他。於是嘗試著找了一會規律,可得到乙個 以100為例 相同的用顏色標記出...