완전수 구하기

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

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

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

113개의 풀이가 있습니다. 3 / 12 Page

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);
            }
        }
    }

}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def perfectN(a):
    sum=0
    for i in range(1,int(a**0.5)+1):
        if a%i:pass
        else:
            sum=sum+i
            sum=sum+(a/i)
    if (sum-a)==a:
        return sum
n=input("Number=")
for i in range(1,int(n)):
    if perfectN(i):
        print(i,end=" ")
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

#include <stdio.h>

void main(void)
{
    int N,num;
    int i;
    int sum =0;
    printf("자연수를 입력하시오\n");
    scanf("%d",&N);
    for(num=1;num<=N;num++)
    {
        for(i=1;i<num;i++)
        {
            if(num%i == 0)
                sum+=i;
        }
        if(sum == num)
            printf("%d ",num);
        sum = 0;
    }
}

c언어로 작성해봤습니다.

숫자가 커질수록 시간이 오래걸리네요

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def find_func(num):
    result = 0
    for x in range(1,num):
        if num % x == 0:
            result += x
    if result == num:
        return True

print([x for x in range(2,int(input())+1) if find_func(x)])

#### 2017.01.05 D-413 ####
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
n=int(input("N:"))
print([x for x in range(1,n+1) if x==sum(i for i in range(1,x) if x%i==0)])
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

scala

(1 until scala.io.StdIn.readLine().toInt).foreach(f => {
    var sum = 0
    (1 until f).foreach(i => if (f % i == 0) sum = sum + i)
    if (sum == f) println("완전수 = " + f);
})
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

javascript


let YourNum = Number(prompt());
PerfectNumber(YourNum);

function PerfectNumber(inputNum){
    let result = [];
    let numArray = Array(inputNum).fill().map((_, i) => i+1);   
    for(i of numArray){
        let sum = 0;
        for(j=1;j<=numArray[i];j++){
            if((numArray[i] % j) == 0 && numArray[i] != j){
                sum += j;
            }
        }
        if(numArray[i] == sum){
            result.push(numArray[i]);
        }
    }
    return alert(result);
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
// C++

int SumD( int nValue )
{
    int nSum    = 0;
    int nData   = nValue - 1;

    while( nData > 0 )
    {
        if( nValue % nData == 0 )
        {
            nSum    += nData;
        }

        --nData;
    }

    if( nValue == nSum )
    {
        return nValue;
    }

    return 0;
}

int main()
{
    int nValue  = 0;

    cin >> nValue;

    for( int x = 0 ; x <= nValue ; ++x )
    {
        if( SumD( x ) != 0 )
        {
            cout << x << "\n";
        }
    }

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

include

void perfect(int N) { for (int i = 2; i <= N; i++) { if (yaksu(i) + 1 == i) { printf("%2d", i); } } }

int yaksu(int a) { int sum = 0; for (int i = 2; i <= a/2; i++) { if (a%i != 0) { continue; } sum = sum + i; } return sum; }

int main(void) { int N; scanf_s("%d", &N);

perfect(N);


return 0;

}

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

public class Hello {

public static void main(String[] args) {

    System.out.println("숫자 N을 입력하세요.");
    Scanner s = new Scanner(System.in);
    int input = s.nextInt();
    int sum = 0;

    for(int i=1; i<=input; i++){

        for(int j=1; j<i; j++){
            if(i%j == 0){
                sum += j;
            }
        }

        if(i==sum){
            System.out.print(i+" ");
        }

        sum = 0;

    }

}

}

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

풀이 작성

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

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


언어별 풀이 현황
전 체 x 113
python x 42
cpp x 21
java x 16
ruby x 1
matlab x 2
scala x 1
javascript x 2
기 타 x 23
cs x 4
r x 1