JustOj 1032: 习题6.7 完数

题目描述

一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,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暂时不能测试但是样例是对的附下图 (欢迎路过的大佬指出错误)



 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <vector>
 6 #include <cstdlib>
 7 #include <iomanip>
 8 #include <cmath>
 9 #include <ctime>
10 #include <map>
11 #include <set>
12 using namespace std;
13 #define lowbit(x) (x&(-x))
14 #define max(x,y) (x>y?x:y)
15 #define min(x,y) (x<y?x:y)
16 #define MAX 100000000000000000
17 #define MOD 1000000007
18 #define pi acos(-1.0)
19 #define ei exp(1)
20 #define PI 3.141592653589793238462
21 #define INF 0x3f3f3f3f3f
22 #define mem(a) (memset(a,0,sizeof(a)))
23 typedef long long ll;
24 ll gcd(ll a,ll b){
25     return b?gcd(b,a%b):a;
26 }
27 const int N=2005;
28 const int mod=1e9+7;
29 void la(int n)
30 {
31     int s=n-1,flag=0;
32     for(int i=2;i*i<=n;i++){
33         if(n%i==0) s-=i+n/i;
34     }
35     if(s==0) flag=1;
36     if(flag){
37         cout<<n<<" its factors are";
38         for(int i=1;i<n;i++){
39             if(n%i==0){
40                 cout<<" "<<i;
41             }
42         }
43         cout<<endl;
44     }
45 }
46 int main()
47 {
48     std::ios::sync_with_stdio(false);
49     int n;
50     cin>>n;
51     for(int i=2;i<=n;i++){
52         la(i);
53     }
54     return 0;
55 }
posted @ 2017-08-01 10:25  wydxry  阅读(340)  评论(0编辑  收藏  举报
Live2D