n
题意:求 Σ k%i
i=1
除法分块
如果 k/i==k/(i+1)=p
那么 k%(i+1)=k-(i+1)*p= k-i*p-p = k%i-p
所以 商相同时,余数为等差数列
我不知道为什么交到vjudge一直WA,网上搜的题解交上去也WA
#include#include using namespace std;int main(){ int n,k,i,j,p,s,t; long long ans; while(scanf("%d%d",&n,&k)!=EOF) { ans=0; p=k; i=1; while(i<=n) { if(!p) { ans+=1ll*k*(n-i+1); break; } j=k/p; s=k%i; t=k%j; ans+=1ll*(s+t)*(j-i+1)/2; i=j+1; p=k/i; } printf("%lld\n",ans); }}