Time Limit: 1000 ms
Memory Limit: 256 mb
输入一个数n,输出前n个数的约数的和。
输入输出格式
输入描述:
输入一个整数n,1<=n<=1e7
输出描述:
输出一个整数,前n个数的约数的和。
输入输出样例
输入样例#:
7
输出样例#:
41
题目来源
复旦大学2018年机试
方法一:80分(超时)
#include<bits/stdc++.h> //万能库
using namespace std;
int submultiple(int i)
{
int sum=1+i;
for(int j=2;j<i;j++)
{
if(i%j==0) sum+=j;
}
return sum;
}
int main()
{
int n;cin>>n;int sum=1;//1的约数是1
for(int i=2;i<=n;i++)
{
sum+=submultiple(i);
}
cout<<sum;
return 0;
}
方法二: 满分
思路:
7:
1 | 1 |
2 | 1 2 |
3 | 1 3 |
4 | 1 4 2 |
5 | 1 5 |
6 | 1 2 3 6 |
7 | 1 7 |
和是41 可以看到一共有7个1,3个2,2个3,1个4,1个5,1个6,1个7,就是(n/i)*i ;
#include<bits/stdc++.h> //万能库
using namespace std;
typedef long long LL;
LL n,i;
int main()
{
LL n;
cin>>n;
LL sum=0;
for(i=1;i<=n;i++)
{
sum+=i*(n/i);
}
cout<<sum;
return 0;
}
AC