题面
给出正整数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
30%: n,k <= 1000
60%: n,k <= 10^6
100% n,k <= 10^9
分析
考试遇到过,手推失败
lyd蓝书上重逢,虽然看着真的很头疼,还是大概地啃下来了,花了2h+(菜是原罪)
公式太难打了,我放弃,上手写,字丑,时间紧,地铁上写的
将就看了,基本是按照lyd的思路
代码
#include<bits/stdc++.h> using namespace std; long long n,k,l,r,ans; int main() { cin>>n>>k; ans=k*n; for(l=1,r;l<=n;l=r+1) { r=k/l?min(k/(k/l),n):n; ans-=(r-l+1)*(k/l)*(l+r)/2; } cout<<ans; return 0; }