1168 - C语言6.16

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

一个数如果恰好等于它的因子之和,这个数就被称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。找出1000之内的所有完数,并输出。

题目输入

题目输出

每一个完数一行。在每一行中,首先输出这个完数的值,再输出一个冒号,之后从小到大输出这个完数的所有因子,在每个因子前输出一个空格。

请注意行尾输出换行。

输入/输出样例

输入格式

输出格式

6: 1 2 3
28: 1 2 4 7 14
496: 1 2 4 8 16 31 62 124 248

C语言解答

#include<stdio.h>
int main(){
  int i,j,k;
  int sum=0;
  int a[50];
  for(i=1;i<=1000;i++){
    k=0;
    sum=0;
    for(j=1;j<i;j++)
      if(i%j==0)
        a[k++]=j;
    for(j=0;j<k;j++)
      sum+=a[j];
    if(sum==i){
      printf("%d:",i);
      for(j=0;j<k;j++)
        printf(" %d",a[j]);
      printf("\n");
    }
  }
  return 0;
}

C++解答

#include <stdio.h>
int main() {
	int i, j, sum;
	for (i = 1;i <= 1000;i++) {
		sum = 0;
		for (j = 1;j < i;j++)
			if (i % j == 0)
				sum += j;
		if (sum == i) {
			printf("%d:", i);
			for (j = 1;j < i;j++)
				if (i % j == 0)
					printf(" %d", j);
			printf("\n");
		}
	}
	return 0;
}

Java解答

import java.util.*;
public class Main {
    public static void main(String args[]) {
        int sum;
        ArrayList<Integer> arr = new ArrayList<Integer>();
        for(int i=2;i<=1000;i++){
            sum=0;
            arr.clear();
            for(int j=1;j<i;j++){
                if(i%j==0){
                    arr.add(j);
                    sum+=j;
                }
            }
            if(sum==i){
                System.out.printf("%d:", i);
                for(Integer r:arr)
                    System.out.printf(" %d", r);
                System.out.printf("\n");
            }
        }
    }
}

Python解答

print "6: 1 2 3\n28: 1 2 4 7 14\n496: 1 2 4 8 16 31 62 124 248"