bzoj 1257餘數之和sum 除法分塊
阿新 • • 發佈:2019-01-27
Description
給出正整數n和k,計算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值其中k mod i表示k除以i的餘數。例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7Input
輸入僅一行,包含兩個整數n, k。1<=n ,k<=10^9Output
輸出僅一行,即j(n, k)。
Sample Input
5 3Sample Output
7
//用除法分塊的時間複雜度約為sqrt(n) #include<cstdio> #include<iostream> #define ll long long using namespace std; int main() { ll n,k; cin>>n>>k; ll ans=n*k; for(ll l=1,r; l<=n&&l<=k; l=r+1) { r=min(n,k/(k/l)); ans-=(ll)(k/l)*(r-l+1)*(r+l)/2; } cout<<ans<<endl; return 0; }