考慮到這個等式\(a\bmod b = a - b * \lfloor\frac\rfloor\)
所以我們可以得到:
\[\begin
ans &= \sum_^k \bmod i\\
&= \sum_ ^ k - i * \lfloor\frac\rfloor
\end
\]我們可以證得若\(\lfloor\frac\rfloor\)是相同的, 則對應的b所取得的區間必然是連續的
所以維護一下滿足相同的\(\lfloor\frac\rfloor\)的區間的左右端點跳一下就可以了, 注意取值範圍
#include #include #include #include #include #include #define itn int
#define read read
using namespace std;
int n, k;
long long ans = 0;
inline int read()
while(c >= '0' && c <= '9')
return x * w;
}int main()
printf("%lld\n", ans);
return 0;
}
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 i i。而k i是可以使用除法分塊來做的 假設t k i,如果t 0,那麼它的末端就是n,這個很顯然,如果不等於0的話,那麼末端就是k t。之後我們就神奇的過了這道題 極短。include include in...