UVA 1363 Joseph's Problem

https://vjudge.net/problem/UVA-1363

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<cmath>
#include<cstdio>
using namespace std;
int main()
{
int n,k,i,j,p,s,t;
long long ans;
while(scanf("%d%d",&n,&k)!=EOF)
{
ans=;
p=k; i=;
while(i<=n)
{
if(!p)
{
ans+=1ll*k*(n-i+);
break;
}
j=k/p;
s=k%i; t=k%j;
ans+=1ll*(s+t)*(j-i+)/;
i=j+;
p=k/i;
}
printf("%lld\n",ans);
}
}
上一篇:Joseph's Problem UVALive - 3521(等差数列的应用)


下一篇:Python 的文件处理