1168 - C语言6.16
时间限制 : 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"