问题描述:
求正整数2和n之间的完全数(一行一个数)。
完全数:因子之和等于它本身的自然数,如6=1+2+3
输入格式:
输入n(n≤5000)n(n≤5000)。
输出格式:
一行一个数,按由小到大的顺序。
样例输入
7
样例输出
6
题目分析:
大大大水题
n最大5000,好小!
这道题需要求一个数的因数和,求因数和代码:
long long int factor_sum(long long int a){
long long int s = 0;//总和
for(int i = 1; i <= sqrt(a); i++){
if(a%i == 0){//i是a的因数
s += i;//总和增加
if(a/i == i){//如果i刚好是a的平方根
continue;
}else{
s += (a/i);
}
}
}
return s;
}
接下来只需要用for循环来判断小于等于n的数中哪些是完全数就行了
int n;
scanf("%d",&n);//输入
for(int i = 2; i <= n; i++){//遍历小于等于n的数
if(factor_sum(i)/2 == i){//注意因数和包含该数本身,所以应该/2
printf("%d ",i);
}
}
AC代码:
#include<bits/stdc++.h>
using namespace std;
long long int factor_sum(long long int a){
long long int s = 0;
for(int i = 1; i <= sqrt(a); i++){
if(a%i == 0){
s += i;
if(a/i == i){
continue;
}else{
s += (a/i);
}
}
}
return s;
}
int main ()
{
int n;
scanf("%d",&n);
for(int i = 2; i <= n; i++){
if(factor_sum(i)/2 == i){
printf("%d ",i);
}
}
return 0;
}
本弱鸡的第一篇题解,点个赞再走呗!!!