1376 - 完数

通过次数

0

提交次数

0

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

    求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。

题目输入

    测试数据有多组,输入n,n数据范围不大。

题目输出

    对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。

输入/输出样例

输入格式

6

输出格式

6

C语言解答

#include<stdio.h>
int main(){
int n,icount;
int i,j,sum;
  while(scanf("%d",&n)!=EOF){
    icount=0;
  for(i=2;i<=n;i++){
    sum=0;
    
  for(j=1;j<i;j++)
    if(i%j==0)
      sum+=j;
  if(sum==i){
    if(icount++)
      printf(" ");
    printf("%d",sum);
  }
  }
    putchar('\n');
  }
  return 0;
}

C++解答

#include <stdio.h>
#include <math.h>

int SumOfFactors(int num){
	int len = (int)sqrt((double) num);
	int sum = 1;
	for(int i=2; i<=len; i++){
		if(num%i == 0){
			sum += i + num/i;
		}
	}
	if(len*len == num){
		sum -= len;
	}

	return sum;
}

int main(){
    int n;
    while(scanf("%d", &n) != EOF){
    	int iCount = 0;
    	for(int i=1; i<=n; i++){
    		if(SumOfFactors(i) == i){
    			if(iCount++){
    				putchar(' ');
    			}
    			printf("%d", i);
    		}
    	}
    	putchar('\n');
    }

    return 0;
}

Java解答

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);

		while (s.hasNext()) {
			int[] arr = new int[1000];
			int num = 0;
			int n = s.nextInt();
			for (int i = 2; i <= n; i++) {
				int sum = 0;
				for (int j = 1; j <= i / 2; j++) {
					if (i % j == 0)
						sum += j;
				}
				if (sum == i) {
					arr[num++] = i;
				}

			}
			for (int i = 0; i < num; i++) {
				if (i == num - 1) {
					System.out.println(arr[i]);
				} else
					System.out.print(arr[i] + " ");
			}
		}
	}

}