P2261 CQOI2007 餘數求和

2022-05-09 19:30:05 字數 1021 閱讀 6560

數學題,無背景

給出正整數n和k,計算g(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的餘數。例如g(10, 5)=5 mod 1 + 5 mod 2 + 5 mod 3 + 5 mod 4 + 5 mod 5 …… + 5 mod 10=0+1+2+1+0+5+5+5+5+5=29

輸入格式:

兩個整數n k

輸出格式:

答案輸入樣例#1:

10 5
輸出樣例#1:

29
30%: n,k <= 1000

60%: n,k <= 10^6

100% n,k <= 10^9

找規律並證明可知:

$也就是說兩個相鄰的自然數,若被k除的商相同,則被k取模後的兩個數相差-q。

所以,只要找出乙個區間[i,j],使得k/i=k/(i+1)=...=k/j,即可用等差數列公式求出k mod i + k mod (i+1) + ... + k mod j。

這個任務就是:解方程[k/x]=p。

可以輕易得到px<=k

對於每乙個i,令p=[k/i], q=k mod i,j=min(n,k/p)。

根據等差數列公式得到k mod i + ... + k mod j = q*(j-i+1)-(j-i+1)*(j-i)/2*p。

#include#include#include#include#include#define lli long long int 

using namespace std;

void read(lli &n)

while(c>='0'&&c<='9')

x=x*10+(c-48),c=getchar();

flag==1?n=-x:n=x;

} lli ans=0,p,q,n,k;

int main()

printf("%lld",ans);

return 0;

}

P2261 CQOI2007 餘數求和

數學題,無背景 給出正整數n和k,計算g n,k k mod 1 k mod 2 k mod 3 k mod n的值,其中k mod i表示k除以i的餘數。例如g 10,5 5 mod 1 5 mod 2 5 mod 3 5 mod 4 5 mod 5 5 mod 10 0 1 2 1 0 5 5 ...

P2261 CQOI2007 餘數求和

我是題面 題意還是很清晰,很容易理解 1e9範圍明顯不能暴力,除非你能把常數優化到 frac1 但我實在想象不到用了這麼多取模怎麼把常數優化下去 我們可以把 k i 變成 k k i i 整除 那麼總的和也就從 sum k i 變成了 sum n k k i i 又可以轉化為 nk sum n k ...

P2261 CQOI2007 餘數求和

這道題看上去很簡單,暴力隨便打,30分拿到手。但是顯然你拿30分你就炸了。我們開始考慮優化。發現每乙個 都是風馬牛不相及的,我們考慮轉換。可以發現取膜的性質 a mod b a b times lfloor frac rfloor 然後這個答案就可以轉換為 sum rfloor 用乘法分配律可以把 ...