給出n,k求k%1~n每乙個數的和
首先將原始式子變形成為nk-(k/1*1+k/2*2...k/n*n),此處的除法都是向下取整,也就是說不可以使用運算律了。
那麼我們通過簡化式子,得到了乙個不能用運算律的式子。此時我們發現不能暴力去算他。於是嘗試著找了一會規律,可得到乙個**。(以100為例)
(相同的用顏色標記出來)
如果說顏色是區間的話。那麼知道左端點就可以知道右端點。
記左端點為x,右端點為y.y=k/(k/i),注意此處k/i向下取整。
又由於區間與區間是相連的,所以說下乙個區間的左端點為這乙個區間的右端點加一。
並且第乙個區間的左端點為1.由此可以計算出所有的區間。
1)解題:
將區間思想與式子結合起來。將k/1*1+k/2*2...k/n*n按照區間分開來計算。知道k/i的定值,提取乙個k/i的公因數,剩下的x,x+1,x+2...求和。
2)額外補充:
右端點取出來可能大於n,要處理一下。
當n>k的時候,會出現k/i=0的情況,先把後面的累積到答案中,然後切換成n=k的子任務。
#includeusingview codenamespace
std;
#define ll long longll n,k,ans;
intmain()
ll z=1,y=1
;
while(z<=n)
cout
<
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 i i。而k i是可以使用除法分塊來做的 假設t k i,如果t 0,那麼它的末端就是n,這個很顯然,如果不等於0的話,那麼末端就是k t。之後我們就神奇的過了這道題 極短。include include in...