傳送門
或許這也算是道神仙題?
題目描述非常直白,我們把式子轉化一下,其實就是求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為例 相同的用顏色標記出...