완전수 구하기

자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다. 예를 들면, 6과 28은 완전수이다. 6=1+2+3 // 1,2,3은 각각 6의 약수 28=1+2+4+7+14 // 1,2,4,7,14는 각각 28의 약수

입력으로 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

8개의 풀이가 있습니다.

import java.util.Scanner;

public class test05 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.print("자연수를 입력하세요 : ");

        int num = sc.nextInt();

        for(int i=1; i<=num; i++){
            if(isPerfectNum(i)){
                System.out.println(i);
            }
        }
    }



    //완전수인지 확인하기 위한 함수
    public static boolean isPerfectNum(int su){
        int sum=0;
        for(int i=1; i<=su; i++){
            if(su%i == 0 && su!=i){
                sum += i;
            }
        }
        if(sum == su){
            return true;
        }else{
            return false;
        }
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
//자연수 받아서 그이하의 완전수 출력
public class NaturalNumber {

    static ArrayList<Integer> pNo = new ArrayList<Integer>();
    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);
        System.out.println("숫자를 입력하세요");
        int mynumber = sc.nextInt();

        //1000 이하의 자연수 입력
        for(int naturalNumber=1;naturalNumber<mynumber;naturalNumber++)
        cc(naturalNumber);

        //완전수 출력
        System.out.print("완전수: ");
        for (int s = 0; s < pNo.size(); s++) {
            System.out.print(pNo.get(s) + " ");
        }
    }
    // 약수 구하기
    public static void cc(int naturalNumber) {
        ArrayList<Integer> cc = new ArrayList<Integer>();
        int i = 0;
        while (naturalNumber != i) {
            i++;
            if (naturalNumber % i == 0) {
                cc.add(i);
            }
        }
        check(naturalNumber, cc);
    }
    // 완전수 확인
    public static void check(int naturalNumber, ArrayList<Integer> cc) {
        int sum = 0;
        for (int i = 0; i < cc.size(); i++) {
            sum += cc.get(i);
        }
        if ((sum - naturalNumber) == naturalNumber) {
            pNo.add((sum - naturalNumber));
        }
    }
}

자바 배운지 얼마 안되서 이걸로 해봤는데 5번째 완전수 부턴 이방식으로는 콘솔에선 안나오더라구요!

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
public class Lv1_01 {
    public static void main(String[] args) {
        PerfectNumber p = new PerfectNumber(500000);
        p.result();
    }

}

class PerfectNumber {
    private int n;

     public PerfectNumber(int n){
         this.n = n;
     }

    void play(int num) {
        int result = num;       // 비교를 위해 원본을 저장
        ArrayList<Integer> arr = new ArrayList<Integer>();  // 배열을 생성 
        int sum = 1;    // 약수의 합을 구할 변수  1은 모든 수의 공통약수이기 때문에 디폴트로 지정
        int end = num;  // for문의 중복을 막기위해 종료 위치를 변경해주는 변수
        for (int i = 2; i < end; i++) {
            // num을 2부터 나눠보는데 나머지가 0이면 나누어 떨어지기 때문에 약수가 된다  
            if (num%i==0) {
                arr.add(i);
                arr.add(num/i);
                end = num/i;
            }

        }
        //배열의 합
        for (int i = 0; i < arr.size(); i++) {
            sum+=arr.get(i);
        }

        //배열의 합이 처음 입력받은 수와 같은지 비교
        if (sum==result) {
            System.out.println(sum);
        }

    }

    void result() {
        //입력받은 수부터 2까지 계속 돌려본다
        for (int i = n; i >= 2; i--) {
            play(i);
        }

    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import javax.swing.JOptionPane;

public class lv1_2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int userinputnumber = Integer.parseInt(JOptionPane.showInputDialog("자연수를 입력하시오."));


        for(int userinputnumberdown = 1; userinputnumberdown <= userinputnumber ; userinputnumberdown++){
            int sum = 0;
            for(int i=1; i<userinputnumberdown; i++){
                if(userinputnumberdown%i == 0){
                    sum += i;
                }
            }
            if(sum == userinputnumberdown){
                System.out.println(sum);
            }
        }
    }

}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Iterator;

class Calc{
    int num;
    ArrayList<Integer> list = new ArrayList<Integer>(); 
    public void setNum(int num){
        this.num = num;
    }
    public void findDivsor(){
        int i=1;
        while(true){
            if(this.num%i == 0) list.add(new Integer(i)); 
            else if(i > num/2) break;
            i++;
        }
    }
    public void isPerfect(){
        Iterator<Integer> iter = list.iterator();
        int sum=0;
        while(iter.hasNext()) sum += iter.next();
        if(sum == this.num) System.out.println(this.num + " is a perfect number!");
        else System.out.println(this.num + " is not a perfect number!");
    }
}

public class test5 {

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

        c.setNum(sc.nextInt());
        c.findDivsor();
        c.isPerfect();


    }

}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
자바입니다
public class PerfNu {
    public static void calcPerfNu(int n) {
        int sum = 0;
        for (int i = 1; i < n; i++) {
            if (n % i == 0) {
                sum += i;
            }

        }
        if (n == sum) {
            System.out.println("완전수: " + sum);
        }

    }

    public static void prnPerfNu(int n) {
        for (int i = 1; i <= n; i++) {
            calcPerfNu(i);
        }
    }

    public static void main(String[] args) {
        prnPerfNu(30);

    }

}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
public class test{

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.print("Input: ");

        int num = sc.nextInt();

        find_perfectnumder(num);
    }

    public static void find_perfectnumder(int s){

        List<Object> smallarray = new ArrayList<Object>();
        int count_smallnum=0;
        int size = s;
        int tail = 0;   
        int total=0;

        for(int i=1; i <= size; i++){
            for(int j = 1; j < i; j++){

                tail = i%j;
                if(tail==0  ){

                    smallarray.add(count_smallnum,j);
                    count_smallnum++;

                }

            }

            for(int k=0; k <  count_smallnum; k++){

                total += (int) smallarray.get(k);

            }
            if(total == i){
                System.out.printf("Perfect number is = %d  \n",total);
            }
            count_smallnum=0;
            total = 0;

        }

    }
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import java.util.*;
public class no1 {

public static void main(String [] args) {
    Scanner scanner = new Scanner(System.in);
    int num;
    int a = scanner.nextInt();

    for(int i=2 ; i<=a ; i++) {
        num=i;
        for(int j=i-1 ; j>=1 ; j--) {
            if(i%j==0) {
                num=num-j;
            }
            }
        if(num==0) {
            System.out.print(i+" ");
        }
    }
}
}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.


언어별 풀이 현황
전 체 x 67
java x 8
scala x 1
python x 22
javascript x 2
cs x 1
기 타 x 14
matlab x 2
cpp x 15
r x 1
ruby x 1