标签:输入格式 bad div 表示 计算 c++ ++ clu ret
给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数。例如G(10, 5)=5 mod 1 + 5 mod 2 + 5 mod 3 + 5 mod 4 + 5 mod 5 …… + 5 mod 10=0+1+2+1+0+5+5+5+5+5=29
输入格式:
两个整数n k
输出格式:
答案
30%: n,k <= 1000
60%: n,k <= 10^6
100% n,k <= 10^9
详细题解见这个博客,
自愧弗如
https://blog.csdn.net/nuclearsubmarines/article/details/78165951
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ll n,k;
scanf("%lld%lld",&n,&k);
ll ans=n*k;
for (ll i = 1,r; i <=n ; i=r+1) {
if(k/i!=0) r=min((k/(k/i)),n); //k>i 在一定区间内k/i的值是相同的 在此处计算出这一块的右区间 [i,r] 左闭右闭
else r=n; // 否者就全是0
ans-=(r-i+1)*(k/i)*(i+r)/2; //块大小*块内的值*i/2
}
printf("%lld\n",ans);
return 0;
}
标签:输入格式 bad div 表示 计算 c++ ++ clu ret
原文地址:https://www.cnblogs.com/-xiangyang/p/9493637.html