本文主要是介绍CQOI余数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
CQOI余数之和
给出正整数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=7
输入格式:
输入仅一行,包含两个整数n, k。
输出格式:
输出仅一行,即j(n, k)。
样例输入:
5 3
样例输出:
7
数据范围:
50%的数据满足:1<=n, k<=1000 100%的数据满足:1<=n ,k<=109
时间限制:
1000
空间限制:
512000
#include<bits/stdc++.h>
using
namespace
std;
long
long
n,k;
long
long
ans;
int
main()
{
cin>>n>>k;
if
(n>k)
{
ans+=(n-k)*k;
n=k;
}
for
(
int
i=1;i<=n;i++)
{
if
(i==n)
{
ans+=k%i;
continue
;
}
long
long
pd=k/i;
long
long
pd1=k/(i+1);
if
(pd!=pd1) ans+=k%i;
else
{
long
long
ll=k/pd;
long
long
r=k-pd*ll,l=k-i*pd;
ans+=(l+r)*(ll-i+1)/2;
i=ll;
}
}
cout<<ans;
}
min用longlong和int两个min时容易出错
这篇关于CQOI余数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!