Fear Factoring (除法分块)

在这里插入图片描述
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) as the sum of all of the factors of nn; so F(6) = 12F(6)=12 and F(12) = 28F(12)=28. Your task is, given two integers aa and bb with a ≤ ba≤b, to calculate S = \sum_{a≤n≤b} F(n)S=∑
a≤n≤b

F(n).

1 Input

The input consists of a single line containing space-separated integers aa and bb (1 ≤ a ≤ b ≤ 10^{12}; b-a ≤ 10^{6} )(1≤a≤b≤10
12
;b−a≤10
6
).

2 Output

Print SS on a single line.

样例输入
101 101
28 28
1 10
987654456799 987654456799
963761198400 963761198400
5260013877 5260489265
样例输出
102
56
87
987654456800
5531765944320
4113430571304040

#include<bits/stdc++.h>
typedef unsigned long long ll;
using namespace std;
ll get_sum(ll n) //除法分块
{
    ll ans=0;
    for(ll l=1,r;l<=n;l=r+1)
	{
        r=n/(n/l);
        ans+=(n/l)*(l+r)*(r-l+1)/2;
    }
    return ans;
}
int main()
{
	ll a,b; //求 a~b中所有数的因子的和
	while(cin>>a>>b)
	{
		cout<<get_sum(b)-get_sum(a-1)<<endl;
	}
	return 0;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

henulmh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值