我是題面
題意還是很清晰,很容易理解
1e9範圍明顯不能暴力,除非你能把常數優化到\(\frac1 \),但我實在想象不到用了這麼多取模怎麼把常數優化下去
我們可以把\(k\%i\)變成\(k-k/i*i\)(整除)
那麼總的和也就從\(\sum_^k\%i\)變成了\(\sum_^n k-k/i*i\),又可以轉化為\(nk-\sum_^n k/i*i\)
\(k/i\)的值只有有\(\sqrt k\)種,且相同的值都是連續出現的,所以我們可以直接利用等差數列求\(\sum_^n k/i*i\)
下面放**吧
#include#include#include#include#include#define ll long long
#define gc getchar
using namespace std;
inline ll read()
while(isdigit(p))
return f?-a:a;
}ll n,k,ans;
int main()
ans=n*k-ans;
printf("%lld\n",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 餘數求和
數學題,無背景 給出正整數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 餘數求和
這道題看上去很簡單,暴力隨便打,30分拿到手。但是顯然你拿30分你就炸了。我們開始考慮優化。發現每乙個 都是風馬牛不相及的,我們考慮轉換。可以發現取膜的性質 a mod b a b times lfloor frac rfloor 然後這個答案就可以轉換為 sum rfloor 用乘法分配律可以把 ...