완전수 구하기

자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다. 예를 들면, 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개의 풀이가 있습니다. 1 / 12 Page

이상하게 다른 답들과 다르게 전 너무 쉽게 나오네요.. 오답은 아닌 것 같아 일단 올려봅니다.

package java_3000;
import java.util.*;

public class ExampleTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);       
        System.out.print("입력 > ");
        int N = scanner.nextInt();
        for(int countNum = 1; countNum <= N; countNum++) {
            int sum = 0;
            for(int value = 1; value < countNum; value++) {
                if(countNum % value == 0) {
                    sum += value;
                }           
            }
            if(sum == countNum) {
                System.out.print(sum +" ");
            }
        }
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
```{.python}

n = int(input("Enter number: "))
sum_num = 0

for number in range(1, n+1):
    for num in range(1,number):
        if number%num == 0:
            sum_num += num
    if number == sum_num:
        print(number)
    sum_num = 0

```

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

public class test { 
    public static void main(String[] args) {                
        Scanner input= new Scanner(System.in);
        int num= input.nextInt();
        int array[]= new int[num];
        int sum= 0;     
        int j= 0;

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

        if(num == sum){
            for(j=0; j<array.length; j++){
                if(array[j] != 0){
                System.out.print(array[j]+" ");
                }
            }
            System.out.println();
            System.out.println(num+"은 완전수임.");
        }else{
            System.out.println("완전수가 아님.");
        }

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

파이썬 3입니다

string = ''

num = input("입력된 숫자 이하의 모든 완전수를 출력합니다.")

for i in range(1,1+ int(num)):
    sum =0
    for j in range(1, i):
        if i%j==0:
            sum += j
    if i == sum:
        string += ', ' + str(i)


print(string)
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#풀이1
def pfnum(n):
    perfectnum=[]
    for i in range(1,n):
        if n%i==0:
            perfectnum.append(i)
    return perfectnum

print(pfnum(28))

#풀이2
N=int(input(":"))
perfectnum=[i for i in range(1,N) if N%i==0]
print(perfectnum)
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
# 코딩도장 완전수 구하기
# 자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다.
# 예를 들면, 6과 28은 완전수이다.  6의 약수는 1, 2, 3이고 이들의 합은 6이기 때문이다.
# 입력으로 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.

# J의 생각
#
# 1. for와 n in range(1, N+1)을 이용해서 하나씩 숫자를 늘려간다.
#
# 2. n의 약수를 구한다.
# 2.1 1은 무조건 1의 약수이다.  Yaksoo = [1]로 초기화하면서 시작하면 되겠다.
# 2.2 for와 i in range(2, int(math.sqrt(n))+1)을 이용해서 하나씩 숫자를 늘려간다.
# 2.2 작은 수부터 시작을 해서 약수를 구하면 큰 쪽의 수도 자연스럽게 알 수 있다.
#     약수로 가질 수 있는 가장 큰 값은 n의 제곱근(sqrt)이다.
#     따라서 int(math.sqrt(n))+1개의 루프만 돌려도 충분하다.
#     이는 검색해야 하는 숫자가 늘면 늘수록 성능의 차이가 눈에 띄게 나타난다.
#
# 3. 약수의 합을 구해서 원래의 수(n)와 같으면 결과(result)에 추가한다.

def Yaksoo(n):
    import math

    result = [1] # 2.1

    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            if i not in result:
                result.append(i)
            if int(n/i) not in result:
                result.append(int(n/i))
        else:
            continue
    result.sort()
    return result

N = 100000000

for n in range(1, N+1):
    yaksoo = Yaksoo(n)
    sum_of_yaksoo = sum(yaksoo)
    if  sum_of_yaksoo== n:
        print("%d의 약수는 %s이며, 그 합은 %d입니다. 따라서 %d은 완전수입니다." %(n, yaksoo, sum_of_yaksoo, n))
    else:
        continue
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

// 굳이 배열 쓸 필요 없어서 가능한 쉽게 풀다 보니 이렇게 됬네요

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int inputNum = sc.nextInt();
        for(int a = 1; a <= inputNum; a++) {
            int sum = 0;
            for(int b = 1; b < inputNum; b++) {
                if((a % b == 0) && (a != b)) {
                    sum += b;
                }
            }
            if(sum == a) {
                System.out.print(sum +" ");
            }
        }
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
int N, sum;
            ArrayList arr = new ArrayList();

            Console.Write("자연수 N 입력 : ");
            N = inputInt();

            for (int i = 2; i < N; i++)
            {
                sum = 0;
                for (int j = 1; j < i / 2 + 1; j++)
                {
                    if (i % j == 0)
                        sum += j;
                }
                if (i == sum)
                    arr.Add(i);
            }

            for (int k = 0; k < arr.Count; k++)
                Console.WriteLine(arr[k]);
        }

        static int inputInt()
        {
            int ptr = 0; string sptr;
            sptr = Console.ReadLine();
            try
            {
                ptr = Convert.ToInt32(sptr);
            }
            catch (System.OverflowException e)
            {
                Console.WriteLine("다시 입력해주세요.");
            }
            return ptr;
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <stdio.h>

int main(int argc, const char * argv[]) {

    int start, end;
    int temp;
    int sum;

    printf("범위에 따른 숫자를 입력하시오:");
    scanf("%d %d", &start,&end);

    if (start>end) {
        temp=start;
        start=end;
        end=temp;
    }

    for (int i=start; i<end+1; i++)
    {
        sum=0;

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

            if (i%j==0) {
                sum+=j;
            }
        }

        if (i==sum) {
            printf("%d ", i);
        }



    }


    return 0;
}

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

파이썬 3.5입니다.

# perfect number

N = int(input("Input a natural number: ")) # 숫자를 하나 입력합니다. 

result = [] # 완전수를 저장할 리스트.

for i in range(1, N+1): # 1부터 입력한 숫자까지
    sum = 0
    for j in range(1, i): # 1부터 i까지
        if i%j==0:  
            sum += j # 약수들의 합을 구합니다.

    if i == sum: # 자신을 제외한 약수들의 합이 자신과 같으면, 즉 완전수면.. 
        result.append(i)

print(result)

결과

10000을 입력하면 [6, 28, 496, 8128] 이 출력됩니다.

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

풀이 작성

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

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


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