poj2800 Joseph's Problem

链接

http://poj.org/problem?id=2800

题解

i = 1 n ( k m o d    i ) = i = 1 n ( k i k i ) \sum_{i=1}^n(k\mod i)=\sum_{i=1}^n(k-i\lfloor{k\over i}\rfloor)

代码

//数学小题
#include <cstdio>
#include <algorithm>
#define ll long long
using namespace std;
ll ans, n, k;
int main()
{
	ll i, last;
	scanf("%lld%lld",&n,&k);
	ans=n*k;
	for(i=1;i<=min(n,k);i=last+1)
	{
		last=min(n,k/(k/i));
		ans-=(last+i)*(last-i+1)/2*(k/i);
	}
	printf("%lld",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/FSAHFGSADHSAKNDAS/article/details/83239637