今天遇到这样一个题:
给定一个正整数n,请你求出 1~n 之间所有数字的因数之和是多少?
例如n=4时:
1的因数为1
2的因数为1,2
3的因数为1,3
4的因数为1,2,4
所以4以内所有数字的因数之和为:
1 + 1 + 2 + 1 + 3 + 1 + 2 + 4 = 15
我用了暴力之后,不出意料TLE了。
我也想不到更好的办法,便去查了题解。
题解里是这么写的:
#include<bits/stdc++.h>
using namespace std;
long long n;
long long ans=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++) ans+=n/i*i;
cout<<ans;
return 0;
}
但是我不知道第七行为什么可以写成n/i*i,希望有人帮忙解释下原因~