The Slivians are afraid of factoring; it’s just, well, difficult.
Really, they don’t even care about the factors themselves, just how much they sum to.
We can define F(n)F(n)F(n) as the sum of all of the factors of nnn; so F(6)=12F(6) = 12F(6)=12 and F(12)=28F(12) = 28F(12)=28. Your task is, given two integers aaa and bbb with a≤ba ≤ ba≤b, to calculate S=∑a≤n≤bF(n)S = \sum_{a≤n≤b} F(n)S=∑a≤n≤bF(n).
1 Input
The input consists of a single line containing space-separated integers aaa and bbb (1≤a≤b≤1012;b−a≤106)(1 ≤ a ≤ b ≤ 10^{12}; b-a ≤ 10^{6} )(1≤a≤b≤1012;b−a≤106).
2 Output
Print SSS on a single line.
样例输入
101 101
28 28
1 10
987654456799 987654456799
963761198400 963761198400
5260013877 5260489265
样例输出
102
56
87
987654456800
5531765944320
4113430571304040
题意:输入a和b,让求由a到b的每一个数的所有因素和。
思路:通过除法分块直接处理a-1和b。
#include <bits/stdc++.h>
typedef unsigned long long ull;
using namespace std;
ull qiu(ull a)
{
ull sum=0;
ull r;
ull l=1;
while(l<=a){
ull n=a/l;
ull len=a/n;
sum+=(len-l+1)*(l+len)/2*n;
l=len+1;
//cout<<sum<<endl;
}
return sum;
}
int main()
{
ull a,b;
while(cin>>a>>b){
cout<<qiu(b)-qiu(a-1)<<endl;
}
}