[CQOI2007]余数求和(数学)
程序员文章站
2022-04-02 21:27:37
...
题解:
本题主要是两个重要结论:
- 一个数除以1~n的所有数向下取整的结果最多只有种(目前本菜鸡还不会证,不过我估计不久我就会证了)
- 得到1性质中结果相等的一段可以这样如代码中标记的那行做(证明方法也不太严谨)
然后简单转化: ,用等差数列求和方法就可以解出此题
代码:
#include <iostream>
#include <stdio.h>
using namespace std;
long long n,k,ans,r,nowv;
int main()
{
cin>>n>>k;
for(long long l=1;l<=n;l=r+1){
nowv=k/l; /*标记处*/
if(!nowv)
r=n; /*防除0错*/
else
r=min(n,k/nowv); /*标记处*/
long long len=r-l+1,he=(len*(l+r))/2;
ans+=k*len-nowv*he;
}
cout<<ans<<endl;
return 0;
}