首页 > 试题广场 >

完数

[编程题]完数
  • 热度指数:7518 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
    求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子(除了它自己)相加和的数。

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


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

输入

6

输出

6
Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int n = scanner.nextInt();
            for (int i = 1; i <= n; i++) {
                int sum = 0;
                for (int j = 1; j < i; j++) 
                    if (i%j==0) sum+= j;
                if (sum==i) System.out.print(i+" ");
            }
            System.out.println();
        }
    }
}


发表于 2020-03-19 23:02:22 回复(0)
import java.util.Scanner;
import java.util.ArrayList;
public class Main{
    public static void main(String[] args){
        int n = new Scanner(System.in).nextInt();
        ArrayList al = new ArrayList();
        for(int i=2;i<=n;i++){
            if(findFactor(i)){
                al.add(i);
            }
        }
        for(int i=0;i<al.size();i++){
            System.out.print(al.get(i));
            if(i != al.size()-1){
                System.out.print(" ");
            }
        }
    }
    public static boolean findFactor(int x){
        int sum=0;
        for(int i=1;i<=x/2;i++){
            if(x%i == 0){
                sum+=i;
            }
        }
        return sum == x;
    }
}
发表于 2018-08-03 01:55:35 回复(0)

运行时间:51ms
占用内存:10824k
notice:1不是完数
完数的定义:某自然数除它本身以外的所有因子之和等于该数,则该数被称为完数。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
 * @author Allen_Hua
 * @create_time 创建时间:May 12, 2018 9:19:14 PM 类说明
 */
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            int n = scan.nextInt();
            int sum = 0;
            List list = new ArrayList();
            // 找到从2到n之间的所有的完数(包括2和n)
            for (int i = 2; i <= n; i++) {
                // 对该数找因子 因子求和
                for (int j = 1; j < i; j++) {
                    // 加限定条件 找到因子
                    if (i % j == 0) {
                        sum += j;
                    }
                }
                if (sum == i) {
                    list.add(i);
                }
                sum = 0;
            }
            // 进行格式控制输出
            for (int i = 0; i < list.size() - 1; i++) {
                System.out.print(list.get(i) + " ");
            }
            System.out.println(list.get(list.size() - 1));
        }
    }
}
编辑于 2018-05-12 21:37:00 回复(0)

问题信息

难度:
3条回答 9246浏览

热门推荐

通过挑战的用户

查看代码
完数