大地母亲在忽悠着你
题目描述
大地母亲在护佑着你……
……
对不住了,我不想写背景了。
……
某牛头人:愿大地母亲宽恕你的罪行……
……
如何得到宽恕?
……
某牛头人:计算
∑mi=1n mod i
的值。
……
大地母亲你真在忽悠我……
输入格式
第一行
2
个数字
输出格式
输出一个数字,即答案。
样例输入
5 3
样例输出
7
样例解释
3 mod 2=1
3 mod 3=0
3 mod 4=3
3 mod 5=3
答案为
1+3+3=7
。
数据范围
20%
的数据
1≤N,M≤106
。
100%
的数据
1≤N,M≤109
。
Solution
ans=∑i=1mn mod i=∑i=1mn−⌊ni⌋⋅i=mn−∑i=1m⌊ni⌋⋅i
Code
#include <iostream>
#include <cstdio>
#define LL unsigned long long
#define Min(x,y) ((x)<(y)?(x):(y))
using namespace std;
LL m,n,minx,ans;
int main(){
freopen("cheat.in","r",stdin);
freopen("cheat.out","w",stdout);
scanf("%llu%llu",&m,&n);
minx=Min(m,n);
ans=n*m;
for(LL i=1,it;i<=minx;i=it+1){
it=Min(minx,n/(n/i));
ans-=(n/i)*((it+i)*(it-i+1)/2);
}
printf("%llu\n",ans);
return 0;
}