题目描述
一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子:
输入
N
输出
? its factors are ? ? ?
样例输入
1000
样例输出
6 its factors are 1 2 3
28 its factors are 1 2 4 7 14
496 its factors are 1 2 4 8 16 31 62 124 248 题解:枚举即可 学校oj暂时不能测试但是样例是对的附下图 (欢迎路过的大佬指出错误)
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#define lowbit(x) (x&(-x))
#define max(x,y) (x>y?x:y)
#define min(x,y) (x<y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.141592653589793238462
#define INF 0x3f3f3f3f3f
#define mem(a) (memset(a,0,sizeof(a)))
typedef long long ll;
ll gcd(ll a,ll b){
return b?gcd(b,a%b):a;
}
const int N=;
const int mod=1e9+;
void la(int n)
{
int s=n-,flag=;
for(int i=;i*i<=n;i++){
if(n%i==) s-=i+n/i;
}
if(s==) flag=;
if(flag){
cout<<n<<" its factors are";
for(int i=;i<n;i++){
if(n%i==){
cout<<" "<<i;
}
}
cout<<endl;
}
}
int main()
{
std::ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=;i<=n;i++){
la(i);
}
return ;
}