자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다. 예를 들면, 6과 28은 완전수이다. 6=1+2+3 // 1,2,3은 각각 6의 약수 28=1+2+4+7+14 // 1,2,4,7,14는 각각 28의 약수
입력으로 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.
479개의 풀이가 있습니다.
파이썬 3로 짧게 구현해봤습니다.
num= int(input("숫자를 입력하시오 : "))
print([x for x in range(1, num+1) if x==sum(y for y in range(1, x) if x%y==0)])
# 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] 이 출력됩니다.
단순히 N이하의 완전수를 구하기 위해 계산하면 N x N번의 계산을 수행해야 하기 때문에 계산량이 기하급수적으로 늘어납니다. 약수 알고리즘에 대해 조금더 알아보면 최적화를 할수 있는 부분이 있어 이를 토대로 구현해봤습니다.
from math import *
def isPerfectNumber(n):
divisors = [1, ]
for i in range(2, floor(sqrt(n)) + 1):
if n % i == 0:
divisors.append(i)
divisors.append(int(n / i))
return sum(divisors) == n
def main():
perfectNumbers = []
N = int(input("Input Number : "))
for i in range(1, N+1):
if isPerfectNumber(i):
perfectNumbers.append(i)
if perfectNumbers:
print("PerfectNumber :", perfectNumbers)
if __name__ == '__main__':
main()
실행결과
Input Number : 3000
PerfectNumber : [1, 6, 28, 496]
# pnumber.py
n = int(input("자연수 입력 > "))
result = 0
for i in range(1,n+1):
for j in range(1,i):
if i%j==0:
result += j
if result == i:
print("%d "%(result),end=' ')
result = 0
#-*- coding: utf-8 -*-
#1 부터 n 까지
#n 값이 커질수록 좀 오래걸립니다..
#풀이방법 1 평범함
n =1000
result = [ c for c in xrange(1, n) if sum(x for x in xrange(1,c) if not c%x) == c]
#풀이방법 2 필터와 람다를 써보자(뭔가 아름다워보임!! 지림)
n =1000
#하하핫 죄송하지만 1번보다 이게 더 빠르다구욧!
beyond_if = list(filter(lambda c: sum(x for x in xrange(1,c) if not c%x) == c,range(1,n)))
#풀이방법 3 윗 방법들의 뼈대입니다 . 풀이방법 3을 코드리뷰해서 풀이방법 1,2를 만들었습니다 :P
n =1000
for c in xrange(1, n):
if sum(x for x in xrange(1,c) if not c%x) == c:
print c
import java.util.*;
public class Test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("수 입력 : ");
int n = sc.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(i==sum) {
System.out.println(i);
}
}
}
}
num = int(input('type number : '))
print([x for x in range(1, num+1) if x == sum(y for y in range(1, x) if x % y == 0)])
#include <stdio.h>
#include <math.h>
int perfect_num(int n) {
int i, sum = 1;
for (i = 2; i <= (int)sqrt(n); i++) {
if ((n%i == 0) && (n/i != i)) sum += (i+n/i);
else if ((n%i == 0) && (n/i == i)) sum += i;
else continue;
}
if (sum == n) return 1;
else return 0;
}
int main()
{
int i, n;
scanf("%d", &n);
for (i = 2; i <= n; i++) { if (perfect_num(i) == 1) printf("%d\n", i); }
return 0;
}
c언어로 했습니다
#include<stdio.h>
int main(void)
{
int a,i,j,sum;
printf("정수를 입력하세요.\n");
scanf("%d",&a);
for(i=1;i<=a;i++)
{
sum=0;
for(j=1;j<i;j++)
if((i%j)==0)
sum+=j;
if(i==sum)
printf("완전수는 %d\n",i);
}
return 0;
}
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;
}
}
}
# 한글 처리 in Atom 1.21.1 + Anaconda(Python 3.6.3)
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')
# 자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다.
# 예를 들면, 6과 28은 완전수이다.
# 6=1+2+3 // 1,2,3은 각각 6의 약수
# 28=1+2+4+7+14 // 1,2,4,7,14는 각각 28의 약수
# 입력으로 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.
# 6 는 완전수 : 6 = 1+2+3
# 28 는 완전수 : 28 = 1+2+4+7+14
# 496 는 완전수 : 496 = 1+2+4+8+16+31+62+124+248
# 8128 는 완전수 : 8128 = 1+2+4+8+16+32+64+127+254+508+1016+2032+4064
n = int(input("n을 입력하세요 : "))
for i in range(2, n + 1):
temp = '+'.join([str(j) for j in range(1, i) if not(i % j)])
if eval(temp) == i:
print(i, "는 완전수 : ", i, "=", temp)
n=int(input("숫자를 입력하세요 : " ))
a = [ i for i in range(1,n+1) if i == sum([j for j in range(1,i) if i%j ==0 ] ) ]
a
보기 좋게 풀어쓰면 아래와 같습니다.
[ i for i in range(1,n+1) if i == sum([j for j in range(1,i) if i%j ==0 ] ) ]
n=int(input("숫자를 입력하세요 : " ))
for i in range(1,n):
a=[]
for j in range(1,i):
if i%j == 0 :
a.append(j)
#print(i,a, sum(a))
if i == sum(a):
print(i)
//자연수 받아서 그이하의 완전수 출력
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번째 완전수 부턴 이방식으로는 콘솔에선 안나오더라구요!
비주얼 스튜디오에서 c언어로 짜봤습니다
#include <stdio.h>
int main() {
int N, i, j;
int a = 0;
printf("완전수를 구하는 프로그램...\n\n");
getchar();
printf("자연수 N 을 입력하세요.");
scanf_s("%d", &N);
printf("N 이하의 완전수는 \n");
for (i = 1; i <= N; i++) {
for (j = 1; j < i; j++) {
if (i%j == 0)a += j;
}
if (a == i)printf("%d\t", i);
a = 0;
}
puts("\n");
return 0;
}
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);
}
}
}
파이썬3입니다. 박시우님 답을 보니 제가 너무 복잡하게 풀었네요~ㅠㅠ
num = int(input('자연수를 입력하시오: '))
print([sum(i[0:-1]) for i in [[ z for z in range(1, y+1) if y % z ==0 ] for y in [ x for x in range(1,num+1) ]] if sum(i[0:-1]) == i[-1]])
c++ 로 작성
#include<iostream>
using namespace std;
void main()
{
int a, sum;
cout << "정수를 입력하세요" << endl;
cin >> a;
for (int j = 1; j <= a; j++)
{
sum = 0;
for (int i = 1; i < j; i++)
{
if ((j%i) == 0) {
sum += i;
}
}
if (j == sum)
cout << "완전수는 " << j << endl;
}
}
a = int(input('자연수를 입력하세요: '))
result = []
for i in range(a):
if(a % (i+1) == 0):
if(i+1 != a):
result.append(i+1)
print(result)
Ruby
perfect = ->n { (1...n).select {|f| n%f == 0 }.sum == n}
find_pnum = -> { puts (1..gets.to_i).select(&perfect) }
Test
$stdin = StringIO.new("28\n")
expect{ find_pnum.call }.to output("6\n28\n").to_stdout
Python
def getNature(num):
yakList = []
yakSum = 0
natureList = []
for x in range(1,num+1):
for y in range(1,x):
if x % y == 0:
yakList.append(y)
#print x,yakList
if yakList: yakSum = reduce(lambda a,b: a+b, yakList)
if yakSum == x: natureList.append(x)
yakList =[]
yakSum = 0
print natureList
#복잡도 때문에 와일문쓰면 겁나게 느려지네요 ㅋ ㅋ ㅋ
#대충 로직만 이렇게 싸지르고 갑니다 ㅋ ㅋ ㅋ
#base and pick number
picker,base = 100,10000
**logic = [ n for n in range(base) if str(n) == str(n)[::-1]]
**print logic[picker - 1]
num = int(input("자연수 N을 입력하세요 : "))
if num < 0:
num = num * -1
i = 1
while i <= num:
j = 1
perfect_number = 0
while j < i:
if i % j == 0:
perfect_number += j
j = j + 1
if perfect_number == i:
print("완전수 : ", i)
i = i + 1
매트랩으로 작성하였습니다.
N = input('Input number :');
for i = 1 : N
tmp = 0;
for j = 1 : i-1
if mod(i,j) == 0
tmp = tmp + j;
end
end
if i == tmp
disp(i)
end
end
#-*- coding:utf-8 -*-
def perpect_number(number):
for i in range(1, number + 1):
sum = 0
for j in range(1, i):
if i % j == 0:
sum += j
if(i == sum):
print '완전수: {}'. format(sum)
perpect_num = int(raw_input('N이하의 모든 완전수 : '))
perpect_number(perpect_num)
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 ####
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;
}
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;
}
}
}
int perfect_num(int n) { int i, sum = 1; for (i = 2; i <= (int)sqrt(n); i++) { if ((n%i == 0) && (n/i != i)) sum += (i+n/i); else if ((n%i == 0) && (n/i == i)) sum += i; else continue; } if (sum == n) return 1; else return 0; }
int main() { int i, n; scanf("%d", &n); for (i = 2; i <= n; i++) { if (perfect_num(i) == 1) printf("%d\n", i); } return 0; }
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; } }
#include<stdio.h>
int main(void)
{
int n;
int tot;
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
tot = 1;
for(int j = 2; j < i; j++)
{
if(i %j == 0)
tot += j;
}
if(i == tot)
printf("%d ", i);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void main()
{
int num;
int sum = 0;
int *arr;
printf("입력 \n");
printf(">> ");
scanf_s("%d", &num);
printf("\n");
arr = (int*)malloc(num * sizeof(int));
*arr = NULL;
for (int i = 1; i < num; i++)
{
for (int j = 1; j < i; j++)
{
if (i % j == 0)
sum += j;
}
if (sum == i && sum != 1)
{
arr[i] = sum;
}
else arr[i] = NULL;
sum = 0;
}
printf("\n");
printf("%d전까지의 완전수 : ", num);
for (int i = 0; i < num; i++)
{
if (arr[i] != 0 && arr[i] != 1 && arr[i] != NULL)
printf("%d ", arr[i]);
}
}
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int sum = 0;
for (int i=1; i<num; i++) {
sum = 0;
for(int j=1; j<i; j++){
if(i%j == 0){
sum+=j;
}
}
if(i == sum){
System.out.println(sum);
}
}
n = int(input("자연수 입력 > ")) result = 0
for i in range(1,n+1):
for j in range(1,i):
if i%j==0:
result += j
if result == i:
print("%d "%(result),end=' ')
result = 0
무식하게 파이썬(Python3)으로 짜 보았습니다.
def perfect_number(N):
temp = 0
for i in range(1, N+1):
for j in range(1, i+1):
if i == j:
break
elif i % j == 0:
temp += j
if i == temp:
print(i)
temp = 0
perfect_number(int(input()))
파이썬을 이제 막 공부하고 있는 학생입니다. 좋은 문제 감사합니다.
# 숫자 입력
N = int(input("완전수를 확인합니다 : "))
def perfect_num(N):
list1 = []
for s in range(1, N + 1): # 입력 받은 값 이하의 숫자들 범위 중에서 반복
list2 = [] # 약수의 합을 담는 리스트
for i in range(1, s):
if s%i ==0:
list2.append(i)
if sum(list2) == s: # 완전수인지를 확인
list1.append(s)
return list1 # 완전수 리스트 return
print(perfect_num(N))
#include<iostream>
using namespace std;
int yack_sum(int num)
{
int sum = 0;
for (int i = 1; i <= num / 2; i++)
{
if (num % i == 0)
{
sum += i;
}
}
return sum;
}
void perfect_num(int num)
{
for (int i = 1; i <= num; i++)
{
if (yack_sum(i) == i)
cout << i << " ";
}
}
int main()
{
int input;
cin >> input;
perfect_num(input);
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace submit
{
class Program
{
static void Main(string[] args)
{
int input,sum;
input = Convert.ToInt32(Console.ReadLine());
for (int i = 1;i <= input; i++)
{
sum = 0;
for (int j = 1;j < i; j++)
{
if (i % j == 0)
{
sum = sum + j;
}
}
if (sum == i)
{
Console.WriteLine("완전수: " + i);
}
}
}
}
}
#include <stdio.h>
void main()
{
int n = 0;
int sum = 0;
scanf("%d", &n);
for ( int i = 1; i < n; i++ )
{
for ( int j = 1; j <= i/2; j++ )
{
if ( i % j == 0 )
sum += j;
}
if ( sum == i )
printf("%d ", i);
sum = 0;
}
}
#include <stdio.h>
#pragma warning(disable:4996)
void yaksu(int n) {
int result = 0;
for (int i = 1; i < n; i++) {
if (n%i == 0) result += i;
}
if (result == n)
printf("%d\n", n);
}
int main(void) {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
yaksu(i);
}
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();
}
}
파이썬 3로 작성해 보았습니다.
def is_perfect_num(num):
p = 0
for i in range(1, num):
if num % i == 0:
p += i
if p == num:
return True
else:
return False
raw_num = input("자연수를 입력하세요! ")
num = int(raw_num)
for n in range(1, num+1):
if is_perfect_num(n):
print(n, end=' ')
#include<iostream>
using namespace std;
int main()
{
int n;
int sum = 0;
cin >> n;
for (int i = 1; i < n; i++)
{
if (n % i == 0)
sum += i;
}
cout << sum << endl;
}
# include <stdio.h>
int main(int argc,char*argv[]){
int n=2,j=1,k,m=0;
printf("완전수:");
while(TRUE){m=0;
for(j=1;j<n;j++){
k=n%j;
if(k==0)
m+=j;
}
if(n==m) printf("%d,",n);
n++;
if(n==1001) break;
}printf("\b \n");
return 0;
}
def perfect_number(num): sum = 0 for i in range(1,num): if num%i == 0 : sum += i
if sum == num : return True
else : return False
N = int(input())
for i in range(1,N+1) : if perfect_number(i): print(i)
#include <stdio.h>
void main() {
int N, i, j, sig;
printf("Please enter a positive integer: ");
scanf("%d", &N);
for (i=1; i<=N; i++) {
sig =0;
for (j=1; j<=i; j++) {
if(i % j == 0) {
sig += j;
}
else {
continue;
}
}
if ((sig-i) == i) {
printf("%d is a perfect number.\n", i);
}
}
return 0;
}
그냥 심플하게 모든 숫자를 일일이 확인하는 아주 naive한 방법이라 알고리즘이라고 부를만한게 없네요 하하 ^^;;
#include <stdio.h>
void main() {
int N, i, j, sig, id;
printf("Please enter a positive integer: ");
scanf("%d", &N);
i=2;
while (i<=N) {
sig =1;
j = 2;
id = i;
while (j<id) {
if(i % j == 0) {
sig += i/j;
id=i/j;
sig += j++;
}
else {
j++;
}
}
if (sig == i) {
printf("%d is a perfect number.\n", i);
}
i++;
}
return 0;
}
완전수인지 확인을 할때 모든 수를 대입하여 보지 않아도 된다는 점에 착안을 하여 바로 전에 올린 녀석을 수정하였습니다.
예를 들자면, 6을 2로 나누었을 때 나머지가 없이 몫이 3으로 나눠집니다. 이 때 2뿐만 아닌 3도 약수이기 때문에 후에 3을 다시 대입하여서
약수인지를 확인할 필요가 없습니다. 또 작은 수에서 시작해서 점점 큰수로 나누기를 하고 있기 때문에 3보다 큰 수도 확인할 필요가
없습니다. 이런 사실을 이용하여 반복 횟수를 줄였습니다.
100000을 대입해 보시면 이 방법이 훨씬 빠르다는 사실을 쉽게 확인하실 수 있습니다.
감사합니다. ^^
import math
def complete(number):
A = 1
L_final =[]
while A <= number:
L = [1]
for x in range(2,int(math.sqrt(A)+1)):
if A%x == 0:
L.append(x)
L.append(int(A/x))
if sum(L) == A:
L_final.append(A)
A += 1
print A
return L_final
#include <stdio.h>
int main()
{
int num = 0;
int result = 0;
printf("자연수 N을 입력하세요 : ");
scanf_s("%d", &num);
printf("완전수 : ");
for (int j = num; j > 0; j--)
{
for (int i = j-1; i > 0; i--)
{
if (j % i == 0)
{
result += i;
}
}
if (result == j)
{
printf("%d ", j);
}
result = 0;
}
printf("\n");
return 0;
}
자바입니다
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);
}
}
#include <iostream>
using namespace std;
int main()
{
int N;
int sum = 0;
cout << "자연수 입력 : ";
cin >> N;
for (int j = 1; j <= N; j++)
{
sum = 0;
for (int i = 1; i < j; i++)
{
if (j%i == 0)
{
sum += i;
}
}
if (sum == j)
{
printf("%d까지의 완전수 : %d\n", N, j);
}
}
return 0;
}
def perfect_number(n):
div=[]
for i in range(1,n):
if n%i==0:
div+=[i]
if sum(div)==n:
return 1
else:
return 0
def main(n):
result=[]
for i in range(n):
if perfect_number(i+1)==1:
result+=[i+1]
print(result)
N = input("숫자를 입력하세요: ")
def is_perfect(n):
if n == sum_divisor(n):
return True
else:
return False
def sum_divisor(x):
i = 0
for k in range(1,x):
if x%k == 0:
i = i + k
return i
per_list=[]
for num in range(1, int(N)+1):
if is_perfect(num):
per_list.append(num)
print(per_list)
n = 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
#include <iostream>
using namespace std;
int main()
{
int N; // 입력받을 자연수
cout << "자연수를 입력하세요 ";
cin >> N;
if (N <= 0)
{
cout << "자연수가 아닙니다. 다시 입력해주세요. ";
cin >> N;
}
for (int i = 2; i <= N; i++) //입력받은 자연수 보다 작은 자연수 확인
{
int sum = 0;
for (int j = 1; j < i; j++) // 자연수의 약수 확인
{
if (i%j == 0) // 약수이면
{
sum += j;
}
}
if (sum == i) // 완전수인지 확인
cout << i << " ";
}
return 0;
}
/*
자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다.
예를 들면, 6과 28은 완전수이다. 6=1+2+3 // 1,2,3은 각각 6의 약수 28=1+2+4+7+14 // 1,2,4,7,14는 각각 28의 약수
입력으로 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.
*/
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <iostream>
#include <stdlib.h>
using namespace std;
const int INPUT_NUMBER_MAX = 10000;
int main(void)
{
int inputNumber = -1;
int capacityPerfect = 0;
int* perfectNumber = new int[0];
cout << "숫자를 입력하세요(1~10000) : ";
cin >> inputNumber;
if (inputNumber >= 1 && inputNumber <= 10000)
{
for (int i = 1; i <= inputNumber; i++)
{
int* measureNumber = new int[0];
int addNumber = 0;
int devideNumber = 1;
int capacity = 0;
for (devideNumber; devideNumber*devideNumber < i; devideNumber++)
{
if (i%devideNumber == 0)
{
int* temp = new int[capacity];
for (int j = 0; j < capacity; j++)
{
temp[j] = measureNumber[j];
}
delete[] measureNumber;
capacity += 2;
measureNumber = new int[capacity];
for (int j = 0; j < capacity - 2; j++)
{
measureNumber[j] = temp[j];
}
measureNumber[capacity - 2] = devideNumber;
measureNumber[capacity - 1] = i / devideNumber;
delete[] temp;
}
}
if (devideNumber*devideNumber == i)
{
int* temp = new int[capacity];
for (int j = 0; j < capacity; j++)
{
temp[j] = measureNumber[j];
}
delete[] measureNumber;
capacity++;
measureNumber = new int[capacity];
for (int j = 0; j < capacity - 1; j++)
{
measureNumber[j] = temp[j];
}
measureNumber[capacity - 1] = devideNumber;
delete[] temp;
}
for (int j = 0; j < capacity; j++)
{
addNumber += measureNumber[j];
}
if ((addNumber-i) == i)
{
int* temp = new int[capacityPerfect];
for (int j = 0; j < capacityPerfect; j++)
{
temp[j] = perfectNumber[j];
}
delete[] perfectNumber;
capacityPerfect++;
perfectNumber = new int[capacityPerfect];
for (int j = 0; j < capacityPerfect - 1; j++)
{
perfectNumber[j] = temp[j];
}
perfectNumber[capacityPerfect - 1] = i;
delete[] temp;
}
delete[] measureNumber;
}
for(int i = 0 ; i < capacityPerfect ; i++)
{
cout << perfectNumber[i] << endl;
}
return 0;
}
}
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;
}
}
# 1
n = int(input("Input number : "))
divisors = []
for i in range(1, n + 1):
divisors_sum = []
for j in range(1, i):
if i % j == 0:
divisors_sum.append(j)
if sum(divisors_sum) == i:
divisors.append(i)
print divisors
# 2 (박시우님 코드 보고 다시)
print list(filter(lambda i: sum(j for j in range(1, i) if i % j == 0) == i, range(1, n)))
import sys
number_input = int(sys.argv[1])
def isPerfectNumber(number):
divisor = []
for step in range(1, int(number/2)+1):
if number % step == 0:
divisor.append(step)
if number == sum(divisor):
return True
return False
perfect_numbers = []
for number in range(1, number_input+1):
if isPerfectNumber(number):
print("%d is perfect number" % number)
perfect_numbers.append(number)
else:
print("%d is no perfect number" % number)
print("perfect numbers found :", perfect_numbers)
OUTPUT 십만(100000)이하의 숫자에 대해서 모두 조사했는데 4개뿐이네요 perfect numbers found : [6, 28, 496, 8128]
% in matlab
N=input('자연수를 입력해주세요 : ');
P=[];
for n1=1:N;
K=[1];
for n2=2:n1;
a1=n1/n2-floor(n1/n2);
if a1==0;
K=[K n2];
end
end
K(end)=0;
a2=sum(K);
if a2==n1
P=[P a2];
end
end
#include <iostream>
#include <cmath>
using namespace std;
bool isPerfectNum(int number);
int main()
{
int input;
cin >> input;
for (int i = 2; i <= input; i++) {
if (isPerfectNum(i)) {
cout << i << endl;
}
}
return 0;
}
bool isPerfectNum(int number)
{
int sum = 0;
int until = sqrt(number);
for (int i = 2; i <= until; i++) {
if (number % i == 0) {
if (i * i != number) {
sum += number / i;
}
sum += i;
}
}
return (sum + 1) == number;
}
c++ 로 작성해봤습니다.
var n = prompt("What is the perfect number below n");
var arr = [];
var perfect = function(input){
for(var n=1; n<=input; n++){
var sum = 0;
for(var i = 0; i <= n/2; i++){
if(n % i == 0){
sum += i;
}
}
if(sum === n){
arr.push(n);
}
}
}
perfect(n);
alert(arr)
N = int(raw_input("Give me a number :"))
answer = [] # 완전수 묶음
for y in range(1, N+1): mod = [] # 약수 묶음
for x in range (1, y):
if y%x == 0:
mod.append(x)
if sum(mod) == y:
answer.append(y)
print answer
파이썬 2.7 버전
def checkPerf(target, tList):
addrst = 0
for i in range(1, target):
if target%(i) == 0 : addrst+=i
if addrst == target : tList.append(target)
print('완전수 출력하기\n')
d = int(input('자연수를 입력하시오 : '))
perfNum = []
for i in range(1, d+1) : checkPerf(i, perfNum)
print(perfNum)
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+" ");
}
}
}
}
def perfect_num(N: object) -> object: n = N + 1 for i in range(1, n): a = [] b = [] if N % i == 0: a += [i] if sum(a) == N: b += a n -= 1
return b
```
python으로 해봤어요. 첫 문제 풀이네요 1시간넘게 생각해서 했습니다. 재능이 없는건가
# perNum.py
num = int(input("자연수를 입력해주세요 \n"))
def perNum(num):
result = []
for i in range(1, num+1):
x = 0
for j in range(1, i):
if i % j == 0:
x += j
if x == i :
result.append(x)
print(result)
perNum(num)
파이썬
int1 = int(input("자연수 입력: "))
# 입력값을 받습니다.
a = [x for x in range(1,int1) if int1 % x == 0]
# range() 사이에서 int1을 x로 나누어 나머지가 0인 숫자만 리스트 a에 담습니다.
if sum(a) == int1:
print("%s" % a)
# 리스트 a의 합이 최초 입력 받은 입력값인 자연수와 같아야만 결과를 출력합니다.
n = int(input('자연수 N 을 입력하세요'))
total = 0
for number in range(1,n+1):
for i in range(1,number):
if number % i == 0:
total += i
if total == number:
print('Perfect number : %d' %number)
total = 0
다른 분들과 비슷하긴 하지만.. 본인이 푸는데 의의가 있겠죠!?! ㅋㅋㅋ
10000이상부터 겁나 느려집니다.ㅠㅠ
static void Main(string[] args)
{
Program p = new Program();
Stopwatch sw = new Stopwatch();
int input = Convert.ToInt32(Console.ReadLine());
sw.Start();
p.isPerpectNumber(input);
sw.Stop();
Console.WriteLine("프로그램 실행시간 :" +sw.ElapsedMilliseconds.ToString() + "ms");
Console.ReadLine();
}
private void isPerpectNumber(int input)
{
for(int i = 1; i <= input; i++)
{
/////////////리스트에 약수 넣기///////////////
List<int> divisor = new List<int>();
for(int m = 1; m < i; m++)
{
if(i % m == 0)
{
divisor.Add(m);
}
}
///////////// 완전수인지 체크///////////////
int match_sum = 0;
foreach (var divi in divisor)
{
match_sum += divi;
}
if (match_sum == i)
{
Console.WriteLine(i + " ->완전수");
}
divisor.Clear();
}
}
def checkPerfect(n):
result=0
for x in range(1,n):
if n%x == 0:
result += x
if result == n:
print(result)
print("완전수입니다")
def seekPerfect(n):
result = 0
for x in range(1,n+1):
checkPerfect(x)
언어는 c언어 입니다. 반복문 횟수를 줄이기위해 생각을 해 봤는데 temp라는 변수를 둬서 num을 i로 나눠서 생긴 몫을 지정했습니다. 36을 예로 들자면 총 약수는 1,2,3,4,6,9,12,18,36 이렇게 있고 i = 2일 때 temp = 18, i = 3일 때 temp = 12 이렇게 되는 식입니다. 이렇게 해서 i와 i로 나눈 몫을 함꺼번에 sum에 넣고 i가 temp을 못 넘게 지정해 횟수를 줄이도록 해 봤습니다. for문 조건식에서 i < num/2는 i가 num이 소수일 때를 위해 뒀고, sum <= num은 약수의 총합이 num을 넘으면 완전수가 아니니까 끝나게 할려고 했습니다.
#include<stdio.h>
int is_perfect_number(int num) {
int sum = 1, temp = num;
for (int i = 2; i < num / 2 & sum <= num & i < temp; i++) {
if (num % i == 0) {
if (i == num / i) {
sum += i; temp = i;
}
else {
sum += i; sum += num / i; temp = num / i;
}
}
}
if (num == sum)
return 1;
return 0;
}
int main() {
int num = 0;
scanf_s("%d", &num);
for (int i = 2; i <= num; i++) {
if (is_perfect_number(i) == 1)
printf("%d ", i);
}
return 0;
}
#include <stdio.h>
void main(void)
{
int num = 0; // 입력받는 값.
scanf("%d", &num);
for (int i = 1; i <= num; i++)
{
int sum = 0; // 해당하는 수가 완전수인지 비교를 위한 값.
for (int j = 1; j < i; j++)
{
if (i%j == 0)
{
sum += j;
}
}
if (sum == i)
{
printf("%d ", i);
}
}
}
#include <iostream>
#include <windows.h>
using namespace std;
void PerfectNumber(int n)
{
int i = 0;
int sum = 0;
for (i = 1; i <= n; i++)
{
for (int j = 1; j < i; j++)
{
if (i%j == 0)
sum += j;
}
if (i == sum)
cout << sum << "\n";
sum = 0;
}
}
int main()
{
int i, n;
cout << "정수를 입력하세요.\n";
cin >> n;
PerfectNumber(n);
system("pause");
return 0;
}
#함수부
#입력받은 숫자 % 숫자보다 작은자연수 == 0 인 수들을 다 더했을때
#자기 num 이 나오면 된다.
def cal(num):
for i in range (1,num+1):
result = 0
for j in range(1, i):
if((i % j == 0) & (i != j)):
result = result + j
if(result == i):
print(i)
#실행부분
#입력받은 숫자
num = input("자연수를 입력하세요: ")
num = int(num)
#함수 호출
cal(num)
num=int(input('Input number:'))
output=[]
for x in range(1,num+1):
if x==sum(y for y in range(1,x) if x%y==0):
output.append(x)
print output
_ = [*(print(x) for x in range(1, int(input('>>>'))+1) if x == sum(y for y in range(1, x) if x%y == 0))]
한줄 풀이입니다. 앞의 _ =은 빼도 됩니다.
파이썬 3.6.0 64
c# 으로 해봤어요. 어렵네요.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Practice001
{
class PerfectNumber
{
int N;
int Temp;
// 자연수 N 입력 메서드
// 양수 판별 알고리즘 포함
// 양수면 OutPutN() 메서드 실행
public void InputN()
{
int.TryParse(Console.ReadLine(), out N);
if (N < 0)
{
Console.WriteLine("양수를 입력하세요.");
InputN();
}
else if (N > 0)
{
Console.WriteLine("양수입니다.");
OutPutN();
}
}
int NChecker()
{
int temp = 0;
for (int i = 1; i <= N; i++)
if (N % i == 0 && N / i != N)
temp += N / i;
return temp;
}
// 완전수를 출력하는 메서드
// 반복문을 통해 자연수 N을 나누어준다.
private void OutPutN()
{
Temp = NChecker();
if (Temp == N)
{
Console.WriteLine("완전수는 : ");
for (int i = 1; i <= N; i++)
if (N % i == 0 && N / i != N)
Console.WriteLine(N / i);
}
else
Console.WriteLine("완전수가 아닙니다.");
}
}
class Program
{
static void Main(string[] args)
{
// 객체 생성 및 InputN() 메서드 실행.
PerfectNumber pn = new PerfectNumber();
pn.InputN();
}
}
}
package primary;
import java.util.ArrayList;
public class CodingDojang01 {
/**
* 자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다.
* 예를 들면, 6과 28은 완전수이다. 6=1+2+3 // 1,2,3은 각각 6의 약수 28=1+2+4+7+14 // 1,2,4,7,14는 각각 28의 약수
* 입력으로 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.
*/
public static void main(String[] args) throws Exception {
args = new String[1]; args[0] = "28";
ArrayList<Integer> perfectNumbers = new ArrayList<>();
ArrayList<Integer> temps = new ArrayList<>();
if(args == null || args.length != 1)
throw new Exception();
int input = Integer.parseInt(args[0]);
for(int i=1; i<=input; i++) {
temps.clear();
for(int divisor=1; divisor<=i; divisor++) {
int quotient = i/divisor;
int reminder = i%divisor;
if(divisor<quotient && reminder == 0) {
temps.add(new Integer(divisor));
if(quotient != i)
temps.add(new Integer(quotient));
}//END OF IF
}//END OF FOR-LOOP : 2
int sum = 0;
for(int temp : temps) {
sum += temp;
}
if(sum == i) {
perfectNumbers.add(new Integer(i));
}
}//END OF FOR-LOOP : 1
for(int perfectNumber : perfectNumbers) {
System.out.println(perfectNumber);
}
}//END OF FUNCTION
}//END OF CLASS
import java.util.Scanner;
public class perfectsu2 {
public static void main(String[] args) {
System.out.print("숫자를 입력하세요 : ");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
System.out.println(num);
int sum = 0;
for(int i = 1; i <=num; i++)
{
for(int j=1; j<i; j++)
{
if(i % j == 0)
{
sum += j;
}
}
if(i == sum)
{
System.out.println(i); //출력
}
sum=0;
}
}
}
N = int(input("N: "))
for n in range(1,N):
sum = 0
i = 1
while i <= n/2:
if n % i == 0: sum = sum + i
i = i + 1
if sum == n: print(n)
python 2.7 version
N = int(raw_input("Give me a number :"))
for t in range(1, N+1): a = []
for i in range(1, t):
if t % i == 0 :
a.append(i)
if sum(a) == t:
b.append(t)
print b
Java 입니다
import java.util.Scanner;
public class Test {
public static void Excute(){
Scanner scan = new Scanner(System.in);
int limit = 0;
System.out.println("## 완전수 구하기");
boolean s = false;
do{
try{
System.out.println("");
System.out.print("어디까지 구할지 입력시오 : ");
limit = scan.nextInt();
if(0 < limit && limit <= Integer.MAX_VALUE){
s = true;
}else{
System.out.println("## 2147483647 이하의 자연수만 입력가능 합니다. ");
}
}catch(Exception e){
e.printStackTrace();
System.out.println("## 자연수만 입력가능 합니다. ");
}
}
while(!s);
scan.close();
for(int i =1;i<=limit;i++){
if(chkCnum(i)){
System.out.println(i);
}
}
}
public static boolean chkCnum(int n){
int result=0;
for(int i=1;i<=(n/2);i++){
if(n%i ==0)result+=i;
}
if(result == n) return true;
return false;
}
public static void main(String[] args) {
Excute();
}
}
Python 3.6.0 입니다
num=int(input('input number : '))
for i in range(1,num+1):
a=sum([x for x in range(1,i) if i%x==0])
if i==a:
print(i)
#include <stdio.h>
int main()
{
int n;
int i;
int j;
int k;
int sum;
printf("완전수를 찾아라.\n");
printf("입력한 수 이하의 모든 완전수를 찾는 프로그램입니다.\n");
printf("자연수를 입력하세요 : \n");
scanf("%d", &n);
printf("완전수는 다음과 같다\n");
for (i = 1; i < n+1;i++)
{
sum = 0;
for (j = 1; j < i; j++)
{
if (i%j == 0)
{
sum = j + sum;
}
}
if (sum == i)
{
printf("%d ", i);
}
}
return 0;
}
python입니다.
a=int(input("숫자를 입력하세요: "))
div1=[]
for n in range(1,a):
div2=[]
for i in range(1,n):
if n%i == 0:
div2.append(i)
if sum(div2) == n:
div1.append(n)
print(div1)
N
for i in range(N-1): diviserlist = [] if divmod(N, i) ==0: diviserlist.append(i) elif: pass
print(diviserlist)
#include <stdio.h>
int main(void)
{
int i;
int sum=0;
int pnum;
printf("입력: ");
scanf("%d" , &pnum);
while(pnum != 0)
{
for(i=1; i<pnum; i++)
{
if(pnum%i == 0)
sum += i;
}
if(sum == pnum)
{
printf("%d ", sum);
}
sum=0;
pnum--;
}
return 0;
}
# pnumber.py
n = int(input("자연수 입력 > "))
result = 0
for i in range(1,n+1):
for j in range(1,i):
if i%j==0:
result += j
if result == i:
print("%d "%(result),end=' ')
result = 0
import java.util.ArrayList;
public class PerfectTest {
public static void main(String[] args) {
long input = 10000;
for (long i = 2; i < input; i++){
long sum = 0;
ArrayList<Long> al = new ArrayList<>();
for (long j = 1; j < i; j++){
if (i % j == 0){
al.add(j);
sum += j;
}
}
if (sum == i){
System.out.print(i+" :");
for (long num: al){
System.out.print(num + " ");
}
System.out.println();
}
}
System.out.println("END");
}
}
using namespace std;
int main() { int num; int count=0; printf("n 입력 : "); cin >> num;
for (int i = 2; i <= num; i++) //n이하의 완전수 for문
{
count = 0;
for (int j = 1; j < i; j++)
{
if (i%j == 0)
{
count += j;
}
}
if (i == count)
{
printf("완전수 : %d \n", i);
}
}
return 0;
}
#include <stdio.h>
int main() {
int end, cnt[10] = { 0, };
int i, sum=0, j;
printf("input :");
scanf("%d", &end);
for (i = 1; i <= end; i++) {
for (j = 1; j < i; j++)
if (i%j==0)
sum += j;
if (sum == i)
printf("%d\t", i);
sum = 0;
}
}
package training;
import java.util.Scanner;
/**
* 자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다. 예를 들면, 6과 28은 완전수이다.
* 6=1+2+3 // 1,2,3은 각각 6의 약수 28=1+2+4+7+14 // 1,2,4,7,14는 각각 28의 약수
* 입력으로 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.
*
* @author Administrator
*
*/
public class FindPerfectNum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Please insert Number? ");
int iNum = sc.nextInt();
for(int i=1; i<=iNum; i++){
if(isPerfectNum(i)){
System.out.println("Perfect Number ========>" + i);
}
}
}
public static boolean isPerfectNum(int iNum) {
int iSum = 0;
for(int i=1;i<iNum;i++){
if(iNum % i == 0){
iSum = iSum + i;
}
}
if(iSum == iNum && iNum != 1)
return true;
else
return false;
}
}
int main() { long long n; scanf("%lld", %n); if(n>=6 && n<28) printf("6"); else if(n>=28 && n<496) printf("6, 28"); else if(n>=496 && n<8128) printf("6, 28, 496"); else if(n>=8128 && n<33550336) printf("6,28,496,8128"); else printf("6,28,496,8128,33550336"); return 0; }
n = int(input("Please enter the natural number : ")) print([x for x in range(1, 1+n) if x == sum(y for y in range(1, x) if x%y==0)])
public class perfect{
public static void main(String[] args) {
int num = 0;
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
String input = br.readLine();
num = Integer.parseInt(input);
} catch (IOException e) {
e.printStackTrace();
}
printPerfectNum(num);
}
public static void printPerfectNum(int n){
for(int i=2; i<=n; i++){
if(isPerfectNum(i)){
System.out.print(i + " ");
}
}
}
public static boolean isPerfectNum(int n){
int index = n;
int sum = 1;
for(int i=2; i <= n; i++){
if(i > index || i == index){
break;
}else{
if(n%i == 0){
index = n/i;
sum = sum + i + index;
}
}
}
if(sum == n){
return true;
}else{
return false;
}
}
}
a = []
arg = int(input("숫자를 입력해 주세요"))
for num in range(1,arg+1):
sum = 0
for sub in range(1,num):
if num % sub == 0:
sum += sub
if num == sum:
a.append(num)
print(a)
Python 3.4 로 작성했습니다.
def find_factor(input_num):
factors = []
for j in range(1, input_num):
if (input_num % j) == 0:
factors.append(j)
return factors
given_number = int(input("Enter number: "))
result = []
for i in range(1, given_number+1):
factor_sum = sum(find_factor(i))
if i == factor_sum:
result.append(i)
print(result)
def perf(n):
result = [1]
for nums in range(1,n+1):
num_list = []
for ns in range(1,nums): #nums 이하의 자연수로 나누어서 나머지가 0이면 약수
if nums%ns == 0 : #약수면 num_list에 추가 : num_list 에 들어있는 건 약수!
num_list.append(ns)
if sum(num_list) == nums : result.append(nums) #num_list의 sum이 nums라면 완전수 : result에 추가
return result
print(perf(28))
def p(n):
return n==sum([x for x in range(1,n) if n % x == 0])
def print_all_perfect_number(n):
print([x for x in range(1,n+1) if p(x)])
print_all_perfect_number()
def perfect(number):
result = 0
answer = []
for n in range(1, number+1):
for i in range(1, n):
if n % i == 0:
result += i
if result == n:
answer.append(result)
result = 0
print(answer)
#include <iostream>
using namespace std;
int main(void)
{
int i;
int j;
int cnt;
int sum;
cin >> cnt;
for (i = 1; i < cnt; i++)
{
sum = 0;
for (j = 1; j < i; j++)
{
if (i % j == 0)
sum += j;
}
if (i == sum)
cout << i << "\t";
}
cout << endl;
return 0;
}
수행 시간이 ㄷㄷ,,
#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;
}
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;
// 굳이 배열 쓸 필요 없어서 가능한 쉽게 풀다 보니 이렇게 됬네요
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 +" ");
}
}
}
}
# 코딩도장 완전수 구하기
# 자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다.
# 예를 들면, 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
#풀이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)
파이썬 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)
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();
}
}
```{.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
```
이상하게 다른 답들과 다르게 전 너무 쉽게 나오네요.. 오답은 아닌 것 같아 일단 올려봅니다.
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 +" ");
}
}
}
}
처음으로 올려봅니다.
#include <stdio.h>
#include <math.h>
int main() {
int number , add_number = 2 , divisor = 2 , sum = 1;
printf("숫자를 입력하시오 : ");
scanf_s("%d", &number);
while (add_number <= number) {
while (divisor < sqrt(add_number)) {
(add_number % divisor == 0) ? (sum = sum + divisor + (add_number / divisor)) : (1);
divisor++;
}
if (sum == add_number) {
printf("%d ", add_number);
}
sum = 1, divisor = 2;
add_number++;
}
return 0;
}
N의 범위에 따라서 난이도가 크게 달라질 수 있는 문제같습니다. 아래 코드는 1만 이하에 대해서는 매우 빠른 시간내에 완료됩니다.
def sumOfDivisors(n):
s, k, l = 1, 2, n**.5
while k <= l:
if n % k is 0:
s += (k + n // k)
k += 1
if k * k == n:
s -= k
return s
n = int(input())
for i in range(2, n+1):
if sumOfDivisors(i) == i:
print(i)
def get_perfect_num(N):
rtn = []
for n in range(2, N+1):
divCnt = 0
for i in range(1, n):
if n % i == 0:
divCnt += i
if divCnt == n:
rtn.append(n)
return rtn
public static void main(String[] args) { // 완전수
int num;
Scanner sc = new Scanner(System.in);
System.out.println("번호를 입력하세요 ");
num = sc.nextInt();
for (int i = 1; i <= num; i++) {
if(num%i ==0){
System.out.println(i+",");
}
}
}
def cal_perfection(number):
for i in range(1,number+1):
print(i)
if sum(cal_divisor(i)) == i:
print(i, "is the perfection number! \n")
def cal_divisor(number):
divisor = []
for i in range(1, int(number/2)+1):
remainder = number % i
if remainder == 0:
divisor.append(i)
return divisor
n = int(input("자연수 입력 > ")) result = 0
for i in range(1,n+1):
for j in range(1,i):
if i%j==0:
result += j
if result == i:
print("%d "%(result),end=' ')
result = 0
#alert: exclude the value itself!
N = int(input("Enter any number N=? "))
complete_number=[]
for j in range(1,N+1):
a = j
s=[]
for i in range(1,a): #looking for divisor
if ( a % i == 0) :
s.append(i)
if( sum(s) == a): #looking for the complete number
complete_number.append(a)
print("the complete number less than or same as N is :")
print(complete_number) #printing out the complete number
num = int(input("숫자를 입력하세요:"))
sum =0 for a in range(2,num): sum=0 for b in range (1,a): if (a/b) == (a//b): # print (a,b) sum=sum+b if a==sum : print("%d is perfect number.\n" %sum)
파이썬으로 해보았습니다
num = int(input("숫자를 입력하세요:"))
sum =0
for a in range(2,num):
sum=0
for b in range (1,a):
if (a/b) == (a//b):
# print (a,b)
sum=sum+b
if a==sum : print("%d is perfect number.\n" %sum)
# -*- coding: utf-8 -*-
"""
Created on Fri May 5 16:00:34 2017
@author: haninhwan
"""
list=[]
number = int(input("Enter a number: "))
for i in range(1,number):
k=0
for s in range(1,i):
if(i%s==0):
k=k+s
if(k==i):
list.append(i)
print(list)
#find divisors of x except itself
def divisors(x):
divisors_list = []
for y in range(1,x):
if x % y == 0:
divisors_list.append(y)
return divisors_list
#determine if 'n' is complete number
def cplt_num(n):
total = 0
for num in divisors(n):
total = total + num
if total == n:
return True
else:
return False
#get input
N = int(input("Please input a number: ", ))
#print complete numbers under n
for n in range(1,N+1):
if cplt_num(n) == True:
print (n)
import java.util.Scanner;
public class practice {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for(int i=2; i<=num; i++){
int result = 1;
for(int j=2; j<i; j++){
if((i%j)==0){
result += j;
}
}
if(result == i){
System.out.println(i);
}
}
}
}
자바로 최근에 시작하신 분들이 이해하실 수 있게 해보았어요.. 별루 잘한진 모르겟지만 import java.util.Scanner;
public class abcd { public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int N = 0;
System.out.println("Enter N: ");
N = sc.nextInt();
int sum = 0;
for(int i=2; i<N; i=i+1){
sum = 0;
for(int j=1; j<i; j=j+1){
if(i%j==0){
sum = sum+j;
}
}
if(sum == i){
System.out.println("Perfect Number is: " + i);
}
}
}
}
```
# coding = utf-8
while 1 : # 자연수를 입력받을때까지 무한 루프
number = int(input("자연수를 입력하세요 : ")) # 자연수를 입력받음
n=1
i=0
result = 0
n_list = []
while n < number : #입력받은 수의 약수를 구함
if number%n == 0 : # 나머지가 0인경우
n_list.append(n) # 해당 값을 리스트에 추가함
result += n # 해당 값을 합산함
else : "" # 나머지가 0이 아닌 경우 별도의 작업 없음
n += 1
if result == number : # 약수의 합이 입력값과 같으면, 약수를 출력하고 끝
print(n_list)
break
else :
print("입력한 수는 자연수가 아닙니다.")
n=int(input("숫자 입력하시오: ")
sum_num=0
for i in range(1,n+1):
for j in range(1,i):
if i%j==0:
sum_num+=i
if sum_num==i:
print(i)
def func(a):
lst=[]
num=0
for i in range(1, a):
if a%i==0:
num+=i
lst.append(num)
return lst
a=int(input("number는?"))
n_lst=[]
for i in range(1, a+1):
if i==int(func(i)[0]):
n_lst.append(i)
print(n_lst)
N=int(input("enter the integer: "))
for n in range(2,N+1): divisor=[] for i in range(1,n): if (n%i) ==0: divisor.append(i) #print(n,divisor) if sum(divisor)==n: print("complete numbers",n)
package oiler;
import java.util.Scanner;
public class _1 {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
System.out.println("숫자를 입력해 주세요");
int number=in.nextInt();
while(number>0){
int count=0;
for(int i=1; i<number; i++){
if(number%i==0){
count += i;
}
}
if(number==count){
System.out.println(number);
}
number--;
}
}
}
(C언어로 작성)
#include <stdio.h>
void main()
{
int n, i, j;
scanf_s("%d",&n);
for (i=1;i<=n;i++)
{
int divisiorSum = 0;
for (j=1;j<i;j++)
{
if (i%j==0)
divisiorSum+=j;
}
if (i==divisiorSum)
printf("%d ", i);
}
}
num = input()
sum = 0
list = []
for i in range(1,num+1):
for j in range(1, i):
if i%j == 0:
sum += j
if sum == i:
list.append(sum)
sum = 0
print(list)
// C++로 작성하였습니다. //
int Sum_Divisor(int _value)
{
int result = 0;
for (int i = 1; i < _value; i++)
{
if (_value % i == 0)
{
result += i;
}
}
return result;
}
int main()
{
int input;
printf_s("Input Base Number : ");
scanf_s("%d", &input);
printf_s("Output Perfect Numbers : ");
for (int i = 1; i <= input; i++)
{
int sum = Sum_Divisor(i);
if (i == sum)
{
printf("%d ", sum);
}
}
printf_s("\n");
}
import time
start_time = time.time()
List2 = []
temp = 0
for n in range(N):
n = n + 1
if (n % 2) == 0 and n > 2:
List1 = []
x = int(n // 2)
for i in range(x):
i = i + 1
temp = n % i
if (temp == 0) and (i != n) :
List1.append(i)
temp = sum(List1)
if temp == n:
List2.append(temp)
elif (n > 3) and not(n % 2 == 0) :
List1 = []
for i in range(int(round(n/3))):
i = i + 1
temp = n % i
if (temp == 0) and (i != n) :
List1.append(i)
temp = sum(List1)
if temp == n:
List2.append(temp)
end_time = time.time()
return List2, List1, temp, end_time - start_time
List1 = []
temp = 0
x =int(n)
for i in range(x):
i = i + 1
print("i=%s" %i)
temp = ( t*n )% i
print("temp=%s" %temp)
if (temp == 0):
List1.append(i)
print("i=%s" %i)
List1.append(n*t)
print(List1)
return List1
a = int(input("임의의 자연수 N을 입력하시오: "))
def find(N): # N 미만의 양의 약수의 집합 구하기
group = []
for i in range(1, N-1):
if N % i == 0:
group.append(i)
else: continue
return group
print("N 이하의 모든 완전수를 구해보겠습니다.")
for underN in range(1, a+1):
result1 = find(underN)
sum = 0
for i in range(len(result1)):
sum = sum + result1[i]
if sum == underN:
print(underN, "은(는) 완전수인 자연수입니다.")
else: continue
def calc(number):
value = []
for i in range(1, number + 1):
if number % i == 0:
value.append(i)
return value
num = 6
print(calc(num))
n = int(input ("자연수를 입력하세요 : "))
c = []
for a in range(1,n+1):
sum = 0
if a == 1:
c.append(1)
else:
for b in range(1,a):
if a < b:
pass
elif a%b == 0:
sum = sum + b
if sum == a:
c.append(sum)
print (c)
object PerfectNumber
{
def SearchDivisior(N : Int): IndexedSeq[Int] = (1 to N / 2) filter(x => N % x == 0)
def main(args: Array[String]): Unit = print((5 to 100000) filter( x => x == SearchDivisior(x).sum))
}
스칼라로 간략하게 짜보았습니다. 숫자가 커질수록 계산 시간이 많이 늘어나네요;
def divisor(n):
l = []; i = 1
while i*i <= n:
if n % i == 0:
l.append(i)
l.append(int(n/i))
i += 1
l = list(set(l))
l.remove(n)
return l
def perfectnumber(n):
i = 1; l = []
while i <= n:
if sum(divisor(i)) == i:
l.append(i)
i += 1
return l
import time
start_time = time.time()
perfectnumber(10000)
elapsed_time = time.time() - start_time
print("\n",elapsed_time)
0.37초 걸리네요
N = int(input("숫자를 입력하시오:"))
a = 0
answer = []
for x in range(1,N+1):
sum = 0
for M in range(1,x):
if x%M == 0:
sum = sum + M
else:
pass
if x == sum:
answer.append(x)
print(answer)
import java.util.Scanner;
class PerfectNumber{
public static void main(String[] args){
int N=0;
int yak=0;
Scanner sc = new Scanner(System.in);
System.out.print("Input N : ");
N = sc.nextInt();
if(N<6){
System.out.println("There is no P_number less then " + N);
}
else{
System.out.print("\nP_number of less then " + N + " is ");
while(N>=6){
for(int i=N-1;i>0;i--){
if(N%i==0){
yak += i;
}
}
if(yak==N){
System.out.print(yak);
if(yak>6)
System.out.print(", ");
}
yak=0;
N--;
}
}
}
}
import java.util.Scanner;
public class Q128 {
public static void main(String[] args) {
int question;
Scanner scan = new Scanner(System.in);
System.out.println("완전수 구하기");
question = scan.nextInt();
System.out.println(question+" 이하의 수 중에서 완전수는 ");
for (int i = 1; i <= question; i++) {
pn(i);
}
System.out.println("입니다.");
}
public static void pn(int a) {
int alisum = 0;
for (int i = 1; i < a; i++) {
if (a % i == 0) {
alisum=alisum+i;
}
}
if (a == alisum) {
System.out.print(a+" ");
}
}
}
#2017.05.24 完
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int num;
int i;
scanf("%d",&num);
for(i=1;i<=num;i++)
{
if( i == cc(i))
{
printf("%d \n",i);
}
}
return 0;
}
int cc(int n)
#약수의 합을 계산하는 함수
{
int i;
int sum;
sum = 0;
for(i = 1; i<n;i++)
{
if(n%i == 0)
{
sum += i;
}
}
return sum;
}
// 완전수 구하기 - C#
using System;
using System.Collections;
namespace PerfectNumber
{
class Program
{
static void Main(string[] args)
{
Console.Write("숫자를 입력하십시오:");
string select = Console.ReadLine();
int num = Convert.ToInt32(select);
int sum; // 약수들을 모아 완전수임을 확인하는 식.
Queue list = new Queue(); // 완전수들을 저장하는 큐.
for (int i = 1; i <= num; i++)
{
sum = 0;
for (int j = 1; j < i; j++)
{
if (i % j == 0)
sum += j;
}
if (sum == i)
list.Enqueue(i);
}
Console.WriteLine("{0} 까지의 수 중 완전수는 다음과 같습니다.", num);
while(true)
{
try
{
Console.WriteLine(list.Dequeue());
}
catch
{
break;
}
}
}
}
}
#include<stdio.h>
int main()
{
int iN;
int iPrintcount = 0;
printf("N수 이하의 모든 완전수를 구합니다. N값을 입력해주세요 : ");
scanf("%d", &iN);
for (int iCount = 2; iCount <= iN; iCount++)
{
int iYaksum = 0;
for (int iYakcheck = 1; iYakcheck < iCount; iYakcheck++) // 자기자신을 제외한 약수합이므로 자신(iCount)은 제외
{
if (iCount%iYakcheck == 0) // iYakcheck이 iCount의 약수이면
{
iYaksum += iYakcheck; // 약수합에 더함 (iCount 자신은 제외됨)
}
}
if (iYaksum == iCount) // 약수합이 iCount와 같으면
{
iPrintcount++;
printf("%d 번째 완전수 : %d\n", iPrintcount, iYaksum); //약수합 출력
}
}
return 0;
}
import java.util.Scanner;
/**
* 완전수 구하기
* 자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다.
* 예를 들면, 6과 28은 완전수이다. 6=1+2+3 // 1,2,3은 각각 6의 약수 // 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.
* */
public class Alogrism_Test1 {
public static void main(String[] args) {
int num = 0;
Scanner scan = new Scanner(System.in);
System.out.println(" 자연수 입력 ");
num = scan.nextInt();
System.out.print(num+" 이하의 완전수는 ? ");
for(int i=1; i<=num; i++){
if(isPerfect(i)){
System.out.print(i+", ");
}
}
}
public static boolean isPerfect(int num){
int sum=0;
for(int i=1; i<=num; i++){
if(num%i==0 && num!=i){
sum+=i;
}
}if(sum==num){
return true;
}
return false;
}
}
def find_divisor(int_value) :
dummy = []
for i in range(1, int_value+1) :
if int_value % i == 0 :
dummy.append(i)
result = dummy
return dummy
def validation(list_divisor, input_N) :
if sum(list_divisor[0:(len(list_divisor)-1)]) == input_N :
return True
else :
return False
N = input("input : ")
for i in range(1,int(N)+1) :
if validation(find_divisor(i),i) :
print(i)
# C:\python\perfectnumber.py
N=int(input("자연수 N 입력: "))
sum=0
for n in range(1,N+1):
for i in range(1,n):
if n%i == 0:
sum += i
if sum==n:
print("%d" % n)
sum=0
c로 풀이.
#include <stdio.h>
int perfect_num(int n);
int main(void)
{
int i,n;
printf("숫자 입력 : ");
scanf("%d",&n);
for(i=2;i<=n;i++) if (perfect_num(i)==i) printf("%d ",i);
return 0;
}
int perfect_num(int n)
{
int i,sum=0;
for(i=1;i<n;i++) if((n%i)==0) sum+=i;
return sum;
}
public class ForPerfectNum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 : ");
int n = sc.nextInt();
for(int i=1;i<=n;i++){ // 1부터 입력받은 수까지
int s = 0;
for(int j=1;j<=i/2;j++) // 절반을 넘는 수에는 약수가 없다.
if(i%j==0) s += j; // 약수면 더한다.
if(i==s) System.out.println(i);
}
sc.close();
}
}
C언어로 작성했습니다
int main() { unsigned int input; unsigned int i,j; unsigned int temp;
printf("양의 정수를 입력하세요 : ");
scanf("%d", &input); //원하는 값 입력받기
printf("완전수는...\n");
for (i = 2; i <= input; i++) //1부터 원하는 값까지, 1은 해당안됨
{
temp = 1; //1은 모든 수의 약수이므로 포함하고 시작
for (j = 2; j <= i/2; j++) //약수 구하기(2부터 input의 반값까지만)
{
if ((i % j) == 0) //j가 약수라면
{
temp += j; //약수를 temp에 합산
}
}
if (temp == i) printf("%u\n", i); //맞으면 출력
}
}
import java.util.*;
public class Test01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("입력>> ");
int input = sc.nextInt();
for (int i = 1; i <=input; i++) {
int m =0;
for (int j = 1; j < i; j++) {
if ((int) (i % j) == 0) {
m += j;
}
}
if(i==m)
System.out.println(i);
}
}
}
import java.util.*;
public class Test01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("입력>> ");
int input = sc.nextInt();
for (int i = 1; i <=input; i++) {
int m =0;
for (int j = 1; j < i; j++) {
if ((int) (i % j) == 0) {
m += j;
}
}
if(i==m)
System.out.println(i);
}
}
}
let hab = 0;
let arr = [];
let su = (num) => {
for(let i = 1; i <= num; i++){
for(let j = 1; j <= i/2; j++){
if(i%j==0){
hab+=j;
}
}
if(hab==i){
arr.push(i);
}
hab = 0;
}
return arr;
}
console.log(su(30));
import java.util.ArrayList;
import java.util.Scanner;
public class perfectNumber {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("자연수를 입력하세요. 입력하신 수 이하의 완전수를 모두 출력해드립니다.");
int n=0;
n=scan.nextInt();
int sum=0;
for(int i=1; i<=n; i++){
for(int j=1; j<i; j++){
if(i%j==0){
sum+=j;}//if
}//for j
if(i==sum){//완전수라면 출력
System.out.println("완전수 : "+sum);
}//if
sum=0;
}
}
}
javascript(ES6)
// 배열의 총 합을 반환
Array.prototype.sum = function() {
return this.reduce((a, b) => a + b, 0);
};
// 완전수 판별
Number.prototype.isPerfect = function() {
return this.valueOf() === this.getDivisors().sum();
};
// [1, n/2]까지의 약수 배열을 반환
Number.prototype.getDivisors = function() {
// 완전수는 자기 자신을 제외한 약수의 합이므로
// [1, n] 배열이 아닌 [1, n/2] 배열로 검사해도 된다.
return getSeries(Math.floor(this / 2)).filter(v => v.canDivide(this));
};
// 약수 판별
Number.prototype.canDivide = function(n) {
return n % this === 0;
};
// [1, n] 배열을 만들어준다
var getSeries = function(n) {
return Array.from(Array(n), (_, i) => i + 1);
}
// [1, n] 사이의 완전수들을 배열로 반환
var getPerfectNumbers = function(n) {
return getSeries(n).filter(v => v.isPerfect());
};
console.log(getPerfectNumbers(6).join(" "));
console.log(getPerfectNumbers(30).join(" "));
console.log(getPerfectNumbers(500).join(" "));
#include <iostream>
using namespace std;
bool isCompleteNum(int n)
{
int sum = 0;
for (int i = 1; i < n; i++) {
if (n % i == 0)
sum += i;
}
return sum == n ? true : false;
}
int main()
{
int max = 0;
cin >> max;
for (int i = 1; i <= max; i++)
{
if ( isCompleteNum(i) )
{
std::cout << "complet number : " << i << std::endl;
}
}
return 0;
}
def is_complete_num(num):
sum = 0
for i in range(1, num):
if num % i == 0:
sum += i
if sum == num:
return True
else:
return False
def prt_all_complete_num(num):
for i in range(1, num + 1):
if (is_complete_num(i)):
print(i)
num = int(input("input number: "))
prt_all_complete_num(num)
n = int(input("자연수:"))
print("n 이하의 모든 완전수:")
for i in range(1, n+1):
factors = [x for x in range(1,i) if i % x == 0]
if sum(factors) == i:
print(i)
public class Ex008 {
static int targetNum;
public static void main(String[] args) {
// TODO Auto-generated method stub
//입력
getInputData();
//계산 및 출력
calcPerfnum(targetNum);
}
static private void calcPerfnum(int targetNum) {
for(int i = 1; i <= targetNum; i++) {
int sumOfdiv = 0;
for(int temp = 1; temp < i; temp++) {
if(i%temp == 0)
sumOfdiv += temp;
if(sumOfdiv > i)
break;
}
if(sumOfdiv == i)
System.out.println("완전수: " + i);
}
}
static private void getInputData() {
Scanner scan = new Scanner(System.in);
do {
System.out.print("입력: ");
targetNum = scan.nextInt();
}while(targetNum < 1);
}
}
입력: 1000
완전수: 6
완전수: 28
완전수: 496
Python으로 푼 Brute-force 코드입니다.
def solve(n):
def is_complete(num):
return num == sum(x for x in range(1, int(num / 2 + 1)) if num % x is 0)
print([x for x in range(1, n + 1) if is_complete(x)])
def Perfect_Number(N):
ans = []
for i in range(1,N+1):
lst =[]
if i == 1:
continue
for j in range(1,i/2+1):
for k in range(1,i+1):
if j*k == i:
lst.append(j)
if sum(lst) == i:
ans.append(i)
return ans
print Perfect_Number(100)
class Program
{
static bool isCompleteNum(int n)
{
int sum = 0;
for( int i = 1; i < n ; i++ )
{
if( n % i == 0 && i != n )
sum += i;
}
return sum == n;
}
static void Main(string[] args)
{
int input = 0;
int.TryParse(Console.ReadLine(), out input);
for(int i = 1; i < input; i++)
{
if(isCompleteNum(i))
Console.WriteLine("{0}", i);
}
}
}
def perfectNumber(n):
perfect = []
for i in range(2,n+1):
sum = 0
for k in range(1,i-1):
if(i%k==0):
sum+=k
if(sum==i):
perfect.append(i)
return perfect
print(perfectNumber(28))
input_int = input('자연수를 입력하세요 : ')
for i in range(1,input_int+1):
data = []
for j in range(1,i):
if i % j == 0:
data.append(j)
if sum(data) == i:
print str(i)+'의 약수는 '+str(data)+'이고 '+str(i)+'는 완전수 입니다.'
package java_tutorial;
import java.util.Scanner;
public class PerfectNum {
public static void main(String[] args) {
int sum = 0;
int count = 1;
Scanner sc = new Scanner(System.in);
System.out.print("몇 까지의 완전수를 구하시겠습니까? : ");
int perNum = sc.nextInt();
for(int i = 1; i < perNum; i++)
{
for(int j = 1; j < i; j++)
{
if(i%j==0)
{
sum += j;
}
}
if(sum==i)
{
System.out.println(count + "번째 완전수는 " + i + "입니다.");
count ++;
}
sum = 0;
}
sc.close();
}
}
#include<stdio.h>
void PrintPerNum(int N);
int main(void)
{
int N;
printf("Insert N :");
scanf("%d", &N);
PrintPerNum(N);
return 0;
}
void PrintPerNum(int N)
{
int j;
int i;
for (j=1; j<=N; j++)
{
int total = 0;
for (i = 1; i < j; i++)
{
if (j%i == 0)
total += i;
}
if (j == total)
printf("%d\n", j);
}
}
while True:
number = int(input("input : "))
print([n for n in range(1,number+1) if sum(a for a in range(1, n) if n % a == 0) == n])
public class Ex8 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
for ( int i = 2; i <= number; i++ ){
int sum = 0;
for ( int j = 1; j < i; j++ ){
if ( i % j == 0 ){
sum += j;
}
}
if ( sum == i ){
System.out.println(sum);
}
}
sc.close();
}
}
public class FerFectN {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int a= sc.nextInt();
int sum = 0;
for(int i=1; i < a;i++){
//System.out.println(i);
if(a%i==0){
System.out.print(i + " ");
sum += i;
}
}
System.out.println();
System.out.println("완전수 합 : " + sum);
}
}
import java.util.*;
public class PerfectNumber {
public static boolean discriminant(int n) {
int sum=-n;
for(int i=1; i*i<=n; i++) {
if(n%i==0) {
sum += i;
if(n/i != i) sum += (n/i);
}
}
if(sum==n) return true;
else return false;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
for(int i=1; i<=input; i++)
{
if(discriminant(i))
System.out.println(i);
}
}
}
def my_function(x):
result = list()
for j in range(1,x+1):
li = list()
for i in range(1,j):
if j%i==0:
li.append(i)
if sum(li) == j:
result.append(j)
return(result)
$input_Number = 10000;
for($j =1; $j <= $input_Number; $j++){
$input_value = $j;
$remainder = array();
$remainder_sum = 0;
for($i=1; $i <= $input_value; $i++){
if($input_value % $i == 0){
$remainder[] = $i;
$remainder_sum = $i == $input_value ? $remainder_sum :$remainder_sum + $i;
}
}
if($remainder_sum == $input_value){
echo "완전 수 : ".$input_value."</br>";
}
}
def getPrime(N):
list_data=[]
for i in range(1,N+1):
sum=0
for j in range(1,i):
if i%j==0:
sum+=j
if i==sum:
list_data.append(i)
print(list_data)
print('이 프로그램은 입력으로 자연수 N을 받고, 출력으로 N이하의 모든 완전수를 출력하는 프로그램입니다.')
N=input('자연수 N을 입력하세요:')
getPrime(int(N))
def CN(N):
cn_list = []
for a in range(1,N):
sum = 0
for i in range(1,a):
if a%i == 0:
sum += i
if sum == a:
cn_list.append(a)
print(cn_list)
C
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
if(argc != 2)
{
printf("no argc 2 !!!!\n");
return 0;
}
int tmp = atoi(argv[1]);
int arr[16];
for(int i=0;i<16;i++)
arr[i] = 0;
int count =0;
int result =0;
for(int i=1;i<tmp;i++)
{
if(tmp%i==0)
{
arr[count] = i;
count++;
}
}
for(int i=0;i<count;i++)
result = result + arr[i];
if(result == tmp)
printf("wan jeon soo");
else
printf("no wan jeon soo");
return 0;
}
public static boolean getSumOfDivisor(int num) {
boolean divFlag = false; //완전수인지 확인
int sum = 1; // 약수들의 합
for(int i=2; i<=num/2; i++) {
// 나머지가 0이면 약수
if(num%i==0) {
sum += i;
}
}
// 완전수 확인
if(sum == num) {
divFlag = true;
}
return divFlag;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int inputNum = sc.nextInt();
List<Integer> list = new ArrayList<Integer>();
for(int i=2; i<=inputNum; i++) {
if(getSumOfDivisor(i)) {
list.add(i);
}
}
sc.close();
System.out.println(list);
}
package com.test;
public class perfectNumber {
public static void main(String args[]) {
findPerfectNumber(10000);
}
public static void findPerfectNumber(int max) {
for ( int i=2; i<=max; i++ ) {
int sum=1;
for (int j=2; j <= i / 2; j++ ) {
if ( 0 == i % j ) {
sum += j;
}
if ( sum > i )
break;
}
if ( sum == i )
System.out.println("pefect Num : " + i );
}
}
}
divisor = []
PerfectN = []
N = int(input("N값을 입력하세요: "))
sum = 0
for i in range(1,N + 1):
for j in range(1, i):
if(i % j) == 0:
divisor.append(j)
for list in range(len(divisor)):
sum += divisor[list]
if sum == i:
PerfectN.append(sum)
sum = 0
divisor = []
print("완전수들 "+ str(PerfectN))
def findNum(N):
result=[]
for n in range(1,N):
temp=[]
for i in range(1,n):
if n%i==0:
temp.append(i)
if sum(temp)==n:
result.append(n)
print(result)
findNum(1000)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
for (int i=1; i<=num; i++) { // N 이하의 모든 완전수 출력
int sum = 0;
for (int j=1; j<i; j++) {
if (i % j == 0) {
sum += j;
}
}
if (sum == i) {
System.out.print(i + " ");
}
}
br.close();
}
}
public static void main(String[] args) {
int input = new Scanner(System.in).nextInt();
while(--input!=0) {
int sum=0;
for(int i=1;i<input;i++) if(input%i==0) sum+=i;
if(input==sum) System.out.println(input);
}
}
제 한계입니당 ㅠㅠ
def f(n1):
for i in range(1, n1+1):
cnt = int(i/2)
arr = []
while cnt >= 1:
if i % cnt == 0:
arr.append(cnt)
cnt -= 1
if i == sum(arr):
print(i, arr)
f(30)
public static void main(String[] args) {
//6, 28, 496, 8128
int sum = 0;
int n = 500;
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 1; i <= n; i++) {
for(int j = 1; j < i; j++) {
System.out.println(j);
if(i % j == 0) {
sum += j;
}
}
if(sum == i) {
list.add(i);
}
sum = 0;
}
System.out.println("완전수: " + list);
}
def nature_num(N):
B=[]
for i in range( 2 , N+1):
a = 0
print('i =', i)
for k in range ( 1,i ):
print('k=',k)
if ( i % k ) == 0 :
a = a + k
print('a=', a)
if a == i :
B.append(a)
print(B)
return(B)
nature_num(28)
public class Test {
public static void main(String[] args) {
Test test = new Test();
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for (int i = 1; i < N; i++) {
if (test.divisorSum(i))
System.out.print(i + " ");
}
}
private boolean divisorSum(int num) {
int sum = 0;
for (int i = 1; i < num; i++) {
if (num % i == 0)
sum += i;
}
return (sum == num) ? true : false;
}
}
# python 3.6
n = int(input())
# : 완전수 리스트 = : x가 약수의 합과 같을 경우 : 약수
b = [x for x in range(1, n + 1) if x == sum(i for i in range(1, x) if x % i == 0)]
print(b)
# ans for 10000: [6, 28, 496, 8128]
namespace _20170916
{
class Program
{
static void Main(string[] args)
{
string s = Console.ReadLine();
int z = Convert.ToInt32(s);
for (int a = 1; a < z; a++)
{
int sum = 0;
for (int i = 1; i < a; i++)
{
int b = a % i;
if (b == 0)
{
sum += i;
}
}
if (sum == a)
{
Console.WriteLine(a);
}
}
}
}
}
int perfect_num(int n) { int i, sum = 1; for (i = 2; i <= (int)sqrt(n); i++) { if ((n%i == 0) && (n/i != i)) sum += (i+n/i); else if ((n%i == 0) && (n/i == i)) sum += i; else continue; } if (sum == n) return 1; else return 0; }
int main() { int i, n; scanf("%d", &n); for (i = 2; i <= n; i++) { if (perfect_num(i) == 1) printf("%d\n", i); } return 0; }
#include <iostream>
using namespace std;
int main()
{
int num;
int sum=0;
cin >> num;
for (int i=1; i <= num; i++)
{
for (int j = 1; j <= i / 2 + 1; j++)
{
if (i%j == 0)
{
sum += j;
}
}
if (sum == i)
{
cout << sum << endl;
}
sum = 0;
}
}
public static void main(String[] args) {
List<Integer> list2 = new ArrayList<Integer>();
Scanner scan = new Scanner(System.in);
System.out.println("자연수 a입력:");
int a=scan.nextInt();
for(int i=1;i<=a;i++){
Isperfect(i, list2);
}
for(int tmp : list2) System.out.println(tmp);
}
//완전수인지 판단해 완전수면 배열에 담는다.
public static void Isperfect(int a,List<Integer> list2){
int sum=0;
List<Integer> list = new ArrayList<Integer>();
//완전수 구하는 로직
for(int i=1;i<a;i++){
if(a%i==0){
list.add(i);
}
}
for(int tmp: list){
sum +=tmp;
}
if(a == sum){
list2.add(a);
}
}//완전수 구하는 함수
자바 입니다.```{.java} public class ploblem { public static void main(String[] args) {
List<Integer> list2 = new ArrayList<Integer>();
Scanner scan = new Scanner(System.in);
System.out.println("자연수 a입력:");
int a=scan.nextInt();
for(int i=1;i<=a;i++){
Isperfect(i, list2);
}
for(int tmp : list2) System.out.println(tmp);
}
//완전수인지 판단해 완전수면 배열에 담는다.
public static void Isperfect(int a,List<Integer> list2){
int sum=0;
List<Integer> list = new ArrayList<Integer>();
//완전수 구하는 로직
for(int i=1;i<a;i++){
if(a%i==0){
list.add(i);
}
}
for(int tmp: list){
sum +=tmp;
}
if(a == sum){
list2.add(a);
}
}//완전수 구하는 함수
} ```
자바입니다, 깔끔하게 안나오네요
private static ArrayList<Integer> num(int a) {
ArrayList arr = new ArrayList<>();
for (int i = 1; i < a; i++) {
if (a % i == 0) {
arr.add(i);
}
}
return arr;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("수를 입력하세요: ");
int num = sc.nextInt();
int sum = 0;
for (int i = 0; i < num(num).size(); i++) {
sum += num(num).get(i);
}
if (sum == num) {
System.out.println(sum + "은 완전수");
} else {
System.out.println(sum + "은 완전수가 아니네");
}
}
def perfetn(N):
R=[]
for i in range(1,N+1):
K=[]
for j in range(1,i):
if i%j==0:
K.append(j)
if sum(K)==i:
R.append(i)
print(R)
public static String perpectNum(int n) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= n; i++) {
int test = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0) {
test += j;
}
}
if (test == i) {
list.add(i);
}
}
return list.toString();
}
print([num for num in range(2, int(input('input number: '))+1) if sum([i for i in range(1, num) if not num%i]) == num])
import java.io.IOException;
import java.util.Scanner;
//예외 처리를 위한 클래스를 만든다.
@SuppressWarnings("serial")
class MyExceptionClass extends Exception{
String message;
Throwable cause;
public MyExceptionClass(String message, Throwable cause) {
//super()메소드는 제일 위에 있어야 한다.
super(message, cause);
this.message = message;
this.cause = cause;
}
//출력을 위해 Throwable인터페이스의 printStackTrace메소드를 오버라이딩한다.
@Override
public void printStackTrace() {
System.out.println(message + "발생 : " + cause);
}
}
public class PerfectNum {
//완전수인지 확인한다
private static boolean check(int num){
int sum=0;
for(int i=1; i<=num; i++){
//자기자신은 해당되지 않기 때문에 제외한다
if(num%i == 0 && num!=i){
sum += i;
}
}
if(sum == num){
return true;
}else{
return false;
}
}
@SuppressWarnings("resource")
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = 0;
System.out.print("자연수 = ");
try {
//try-catch-finally문을 실행시키기 위해 파싱한다.
num = Integer.parseInt(in.nextLine());
if(num<=0) {
//음수이면 IOException을 throw한다.
IOException ex = new IOException();
throw ex;
}
}catch(Exception ex) {
MyExceptionClass exc = new MyExceptionClass("에러", ex);
exc.printStackTrace();
System.exit(-1);
}
for(int i=1; i<=num; i++){
if(check(i)){
System.out.println(i);
}
}
in.close();
}
}
python 2.7
from collections import defaultdict
def perfect_number(x):
numb_sample = range(1, x+1)
div_no = defaultdict(list)
for i in numb_sample:
w = numb_sample.index(i)
for j in numb_sample[:w]: # 자신을 제외한 수로 나누어 봅니다.
if i % j == 0:
div_no[i].append(j)
sum_div_no = 0
for k in range(len(div_no[i])): # 약수를 합하여 자신의 수와 맞는지 검사합니다.
sum_div_no += div_no[i][k]
if i <> sum_div_no:
del div_no[i]
return div_no
print (perfect_number(10))
print (perfect_number(30))
print (perfect_number(1000))
python
def perfectN(N):
for i in range(1, N+1):
if i == sum([x for x in range(1, i) if i % x == 0 ]):
print(i, end = ' ')
perfectN(1000)
N = int(input("자연수를 입력하세요 :"))
def divisor(N) :
tot = 0
for i in range(1, N+1) :
if N % i == 0 :
tot += i
return tot
def perfect_number(N) :
n = []
for i in range(1, N+1) :
if divisor(i) - i == i :
n.append(i)
return n
print(perfect_number(N))
a = []
N = input()
for n in range(2, N):
n_l = [1]
for i in range(2, n/2+1):
if n%i == 0:
n_l.append(i)
if sum(n_l) == n:
a.append(n)
print a
def comple(n):
result=[]
for i in range(2, int(n)+1):
tmp=int(i)
tmpp=[1]
for p in range(2, tmp//2+1):
if not tmp%p: tmpp.append(p)
if sum(tmpp)==i:
result.append(i)
return(result)
num='0'
while not num.isdigit() or int(num)<1:
num=(input('1 이상의 자연수: '))
print(comple(num))
(defun foo (num)
(flet ((f (n)
(loop for i from 1 below n
when (= 0 (mod n i))
sum i)))
(loop for i from 1 to num
when (= i (f i))
collect i)))
>(foo 10000)
>(6 28 496 8128)
파이썬 3.6
# 입력받은 자연수의 약수의 합을 구하여 리턴하는 함수 정의
def divisortotal(x):
ans = 0
divisor = []
total = 0
for i in range(1,x+1):
if x % i == 0:
ans = x / i
divisor.append(int(i))
divisor.append(int(ans))
divisor = list(set(divisor))
divisor.remove(x)
for i in range(len(divisor)):
total += divisor[i]
return total
# 1부터 입력받은 자연수까지의 범위 내에서 약수의 합과 같은 자연수(완전수)를 찾아 리스트로 출력
def perfectnum(x):
perfectnumlist = []
for i in range(1,x+1):
if divisortotal(i) == i:
perfectnumlist.append(i)
print("\n",">>> 1 ~ %d 사이의 완전수 :"% x,perfectnumlist)
x = input(" ▶ 자연수를 입력하세요 : ")
if x.isdigit() and int(x) > 0:
perfectnum(int(x))
else:
print("\n"," ※ 자연수를 입력해주세요.","\n")
*결과값
▶ 자연수를 입력하세요 : 10000
>>> 1 ~ 10000 사이의 완전수 : [6, 28, 496, 8128]
파이썬 입니다.
def com(num): ##자연수 n을 입력받음
for j in range(num):
c=0 ##약수들의 합 결과를 저장, a 가 변할 때 마다 새롭게 하기 위해 for문 밑에 저장
a=num-j ##역순으로 돈다. num,num-1,num-2,num-3
for i in range(1,a): ## num의 약수들이 뭐뭐 있는지 검사
if a %i ==0: ##i가 num의 약수 라면
c=c+i ## 약수를들 모두 더한다
if a==c: ##약수들의 합이 자기 자신과 같다면
print ('%d은 완전수'%a)
continue
com(1293)
자바요 ㅎㅎ
public static void main(String[] args)
{
System.out.println("N이하의 완전수를 확인하고 하는 최대값입력: ");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
main m = new main();
m.showPerfectNum(num);
}
public void showPerfectNum(int MAX)
{
int sum = 0;
for(int i = 1; i <= MAX; i++)
{
for(int j = 1; j < i; j++)
{
if(i%j == 0)
{
sum += j;
}
}
if(sum == i)
{
System.out.println(i);
}
sum = 0;
}
}
lst_perfect_num = []
N = int(input("자연수를 입력하세요 : "))
for num in range(1, N + 1):
if sum([x for x in range(1, num) if num % x == 0]) == num: # 양의 약수(자신제외)들의 합이 자신과 같은가?
lst_perfect_num.append(num)
print("{} 이하의 모든 완전수 : ".format(N))
print(lst_perfect_num)
def divisor(n):
psum = []
for i in range(1,int(n)):
if n%i==0:
psum.append(i)
return sum(psum)
N = input()
s1 = [x for x in range(1,1 + int(N))]
s2 = []
for i in s1:
if divisor(i) == i:
s2.append(i)
print(s2)
올리기 부끄러운 코드입니다만..ㅎㅎ
python 3.6.3
#첫번째 풀이
def pfNum():
f_n=int(input("Enter the final number: "))
c=1
List=[]
while c<=f_n:
Sum=0
for i in range(1,c+1):
if c%i==0:
Sum+=i
if (Sum-c)==c:
List.append(c)
c+=1
print(List)
pfNum()
#두번째 풀이
num= int(input("숫자를 입력하시오 : "))
print([x for x in range(1, num+1) if x==sum(y for y in range(1, x) if x%y==0)])
n = int(input("범위 : "))
def perfect(number):
a = number
result = []
for i in range(1,a):
divsum = 0
for j in range(1,i):
if i%j == 0:
divsum += j
if divsum == i:
result.append(i)
return result
print(perfect(n))
import java.util.*;
public class Main { public static void main(String[] args) { Scanner scanf=new Scanner(System.in); int a=scanf.nextInt(); int sum=0; for(int i=1; i<=a; i++) { if(a%i==0 && i!=a) { sum=sum+i; } } if(a==sum) { System.out.println(a+"는 완전수 입니다."); } else { System.out.println(a+"는 완전수가 아닙니다."); }
}
}```{.java}
```
dic={}
N=int(input('N:'))
for x in range(1,N+1):
dic[x]=[1]
for y in range(2,x):
if x%y==0:dic[x]+=[y]
if sum(dic[x])!=x:del dic[x]
print(dic.keys())
#include <stdio.h>
#include <string.h>
int main(){
int k=1, sum=0, N; // 입력값
int i;
scanf("%d",&N);
// 1 ~ N까지 확인
while(k<N){
sum=0;
for(i=1; i<k; i++){
if(k%i == 0) // k를 i로 나누었을때의 나머지가 0이면 약수
sum += i; //약수일때 sum에 해당 값을 추가.
}
if(sum==k)
printf("%d ",k);
k++; // 다음 수 확인
}
}
def perf_num():
list=[]
n=input('number:')
for i in range(1,n+1):
for j in range(1,i):
if i%j==0:
list.append(j)
if sum(list)==i:
print i
list=[]
def Perfect_num(n):
divisor_list=[]
for k in range(1,round(n**0.5)+1):
if n%k==0:
divisor_list.append(k)
if round(n/k) not in divisor_list:
divisor_list.append(round(n/k))
if (sum(divisor_list)-n)==n:
return n
Natural_num=int(input("자연수 N을 입력하세요\n"))
for k in range(6,Natural_num+1):
if Perfect_num(k)==None:
continue
print(Perfect_num(k))
def print_perfect(N):
perfect_numbers = []
for i in range(1,N+1):
i_sum = 0
for j in range(1,i):
if i%j == 0:
i_sum += j
if i == i_sum:
perfect_numbers.append(i)
print(perfect_numbers)
using System;
namespace CSharp_Test
{
class Program
{
static void Main(string[] args)
{
int N = int.Parse(Console.ReadLine());
int sum;
for (int i = 2; i <= N; i++)
{
sum = 0;
for (int j = 1; j < i; j++)
{
if (i % j == 0) //약수
{
sum += j;
}
}
if(i == sum)
{
Console.Write("{0} ", sum);
}
}
}
}
}
public class calculation {
int maxNumber;
List<Integer> list = new ArrayList<Integer>();
int result;
public calculation(int maxNumber) {
this.maxNumber = maxNumber;
}
public boolean searchNumber() {
for(int i = 1; i <= maxNumber; i++) {
List<Integer> list2 = new ArrayList<Integer>();
for(int j = 1; j < i; j++) {
if((i % j) == 0) {
list2.add(j);
}
}
int sum = 0;
for(int j = 0; j < list2.size(); j++) {
sum += list2.get(j);
}
if(i == sum) {
list.add(i);
System.out.println();
}
}
return true;
}
public int sumNumber() {
for(int i = 0; i < list.size(); i++) {
result += list.get(i);
}
return result;
}
}
getdiv :: Integer -> [Integer]
getdiv n1 = [x|x<-[1..n1-1],n1 `mod` x == 0]
sumdiv x = sum$getdiv x
result :: Integer -> [Integer]
result y = [x|x<-[1..y],x==sumdiv x]
main=do
putStrLn "Enter Integer"
input <- getLine
let n = (read input :: Integer)
putStr.show$result n
def perfact_number(N):
p_num = []
for number in range(1, N + 1):
divisor = []
for small in range(1, number):
if number%small == 0:
divisor.append(small)
if sum(divisor) == number:
p_num.append(number)
return p_num
Python 3 가장 단순하게 짜봤는데 N이 커질수록 실행시간이 기하급수적으로 늘어난다는 단점이...
def perfect_number():
pass
numbers = int(input('number : '))
for x in range(1, numbers+1):
sum = 0
for y in range(1, x):
if 0 == x % y:
sum += y
if x == sum:
print(x, end = " ")
def main():
pass
perfect_number()
import math
def is_perfect(n):
tot = 0
for i in range(1, int(math.sqrt(n)) + 1):
if (n % i == 0):
tot += i
tot += n // i
return n == tot - n
N = int(input())
print([x for x in range(1, N + 1) if is_perfect(x)])
a = int(input())
for i in range(1,a+1):
b = 0
for j in range(1,i//2+1):
if i%j == 0:
b += j
if b == i:
print(i)
exit() # 입력값이 커지면 너무 느린데 어카죠..
Swift입니다.
import Foundation
func isPerfectNumber(_ number: Int) -> Bool {
var sum = 0
for i in 1..<number {
sum += (number % i == 0 ? i : 0)
}
return (sum == number) ? true : false
}
print("Enter target number: ", terminator: " ")
if let targetNumberString = readLine() {
if let targetNumber = Int(targetNumberString) {
for i in 1...Int(targetNumber) {
if isPerfectNumber(i) == true {
print(i)
}
}
}
}
import java.util.Scanner;
public class Nums{
public static void main(String[] args){
int i,j;
Scanner sc = new Scanner(System.in);
System.out.println("자연수를 입력하세요.");
int input = sc.nextInt();
System.out.print(input + " 이하의 완전수는");
if(input<6)
System.out.print(" 없습니다.");
else{
for(i=0;i<input;i++){
int Sum1 = 0;
for(j=0;j<i;j++){
if((i+1)%(j+1) == 0)
Sum1 += (j+1);
else;
}
if(Sum1 == (i+1))
System.out.print(" " + (i+1));
else;
}
System.out.println("입니다.");
}
}
}
샌각보다 너무 오래걸리는 것 같아 다시 만들어보니까 속도에서 차이가 나네요.
n,div,z,x = int(input("수를 입력하세요")),[1],0,2
#약수 구하기
while n > x:
if n%x == 0:
div.append(x)
x += 1
# 완전수 구하기
for x in div:
z += x
if z == n :
print("%d 는(은) 완전수 입니다" %(n))
else :
print("%d 는(은) 완전수가 아닙니다" %(n))
def perfect(num) :
cnt = 0
mylist = []
for i in range(1,num+1) :
if i == sum(j for j in range(1, i) if i % j == 0): mylist.append(i)
return mylist
print(perfect(1000))
#숫자 입력은 생략하였습니다.
r = 3000
def chk(input):
self = 0
for n in range(1, input):
if input % n == 0:
self += n
return input == self
for n in range(1, r):
if chk(n):
print(n)
def pf():
num= int(input("숫자를 입력하시오 : "))
for x in range(1,num+1):
result=0
for y in range(1,x):
if x%y==0:
result+=y
if x==result:
print(x)
import java.util.*;
public class hello {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("수 입력 : ");
int n = sc.nextInt();
int sum=0;
for(int i=1; i<=n; i++) {
for(int j=1; j<i; j++) {
if(i%j==0) {
sum += j;
}
}
if(i==sum) {
System.out.println(i);
}
}
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for (int i=1; i<=n; i++) {
int sum = 0;
for (int j=1; j<=i/2; j++) {
if(i%j == 0)
sum += j;
}
if (i == sum)
System.out.println(i);
}
}// 자바. 저랑 똑같이 한 분도 있네요...
java version
import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.IntStream;
public class perfectNumber {
public static void main(String[] argv) {
System.out.print("input natural number : ");
Scanner scanner = new Scanner(System.in);
System.out.println(Arrays.toString(new perfectNumber().getAllPerfectNumber(scanner.nextInt())));
}
private int[] getAllPerfectNumber(int i) {
return IntStream.rangeClosed(1, i).filter(this::isNatureNumber).toArray();
}
private boolean isNatureNumber(int n) {
int sum = 1;
for (int i = 2; i < n; i++) {
if (n % i == 0) {
sum += i;
}
}
return sum == n;
}
}
c version
#include <stdio.h>
#define TRUE (1)
#define FALSE (0)
int IsPerfectNum(int cadidate)
{
int sum = 1, i;
for (i = 2; i < cadidate; i++)
{
if (cadidate % i == 0)
{
sum += i;
}
}
return sum == cadidate ? TRUE : FALSE;
}
int GetNextPerfectNumber(int start, int max)
{
while (++start <= max) {
if (IsPerfectNum(start))
{
return start;
}
}
return FALSE;
}
int main()
{
int input = 0, index, perpectNumber = 1;
int perfectNumbers[1000] = { 0, };
printf("input nature number: ");
scanf_s("%d", &input);
for (index = 0; index <= input; index++)
{
perfectNumbers[index] = GetNextPerfectNumber(perpectNumber, input);
if (perfectNumbers[index] == FALSE)
{
break;
}
perpectNumber = perfectNumbers[index];
}
index = 0;
printf("==========================\n");
while (perfectNumbers[index] != FALSE)
{
printf(" %d ", perfectNumbers[index++]);
}
printf("\n==========================\n");
scanf_s("%d", &input);
return 0;
}
c++ version
#include <algorithm>
#include <list>
#include <iostream>
#include <numeric>
bool IsNotPerfectNumber(int n)
{
int i = 1, sum = 1;
while (++i < n)
{
if (n % i == 0)
{
sum += i;
}
}
return n != sum;
}
int main()
{
std::list<int> perfectNumbers;
int max = 0;
std::cout << "input natural number: ";
std::cin >> max;
perfectNumbers.resize(max);
std::iota(perfectNumbers.begin(), perfectNumbers.end(), 1);
auto end = std::remove_if(perfectNumbers.begin(), perfectNumbers.end(), IsNotPerfectNumber);
for (auto n = perfectNumbers.begin(); n != end; ++n)
{
std::cout << *n << " ";
}
std::cout << std::endl;
return 0;
}
python version
def isNatureNumber(n):
index = 2
sum = 1
while index < n:
if (n % index == 0): sum += index
index = index + 1
return sum == n;
number = input("input nature number: ")
print(list(filter(lambda x: isNatureNumber(x), range(1, int(number) + 1))))
go version
package main
import (
"fmt"
)
func main() {
fmt.Print("input nature num: ")
max := 0
fmt.Scanf("%d", &max)
result := make([]int, 0)
for i := 1; i <= max; i++ {
candidate := i
sum := 0
for j := 1; j < candidate; j++ {
if candidate%j == 0 {
sum += j
}
}
if candidate == sum {
result = append(result, candidate)
print(" ", candidate, " ")
}
}
}
public static int numbering(int n)
{
int sum=0;
for(int i=1;i<n;i++)
{
if(n%i==0)
{
sum+=i;
}
}
return sum;
}
//main
for(int i=1;i<=n;i++)
{
if(numbering(i)==i)
{
System.out.println(i);
}
}
function a(n){
let result = [];
for(let i = 1; i<n+1; i++) {
let sum = 0;
for(let e = 1; e<i; e++) {
if(i%e ==0) {
sum +=e
}
}
if(sum == i){
result.push(i)
}
}
return result;
}
파이썬 3.6입니다
### 완전수 판별 함수를 생성함 ####
def complete_number(n):
### 약수들의 리스트를 구함 ###
submultiple = []
for i in range(1, n):
if divmod(n, i)[1] == 0:
submultiple.append(i)
### 완전수인지 판별함 ###
if sum(submultiple) == n:
print("%d는 완전수입니다" % n)
### 1에서 10만까지의 완전수 리스트를 구함 ###
%%time
for n in range(1,100000):
complete_number(n)
6는 완전수입니다 28는 완전수입니다 496는 완전수입니다 8128는 완전수입니다 Wall time: 14min 42s
n = int(input("자연수 입력 :")) res = 0
for i in range(1, n+1): for j in range(1, i): if i%j == 0: res += j
if res == i:
print(res)
res = 0
print([j for j in range(1,int(input("N: "))+1) if sum([i for i in range(1, j) if j % i == 0]) == j])
# Output:
#N: 10000
#[6, 28, 496, 8128]
Python
n = 30 #n = int(input())
for i in range(1, n+1):
chk = 0
for j in range(1, i):
if i%j == 0:
chk += j
if chk == i:
print(i, end=" ")
#Shorten version
print(*[i for i in range(1, n+1) if i == sum(j for j in range(1, i) if i%j == 0)])
import java.util.Scanner;
import java.util.stream.IntStream;
public class PerfectNum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for (int j = 1; j < num + 1; j++) {
final int z = j;
if (IntStream.range(1, j).filter(i -> (z % i == 0)).sum() == j)
System.out.println(j);
}
}
}
def find_complete( n ):
sum = 0
for i in range(1, n):
if n % i == 0:
sum += i
#print(i)
if sum == n:
return True
else:
return False
n = int(input("자연수 N을 입력해주세요"))
for i in range(1, n+1):
if find_complete(i) == True:
print(i)
def complete_number(num):
divisor_list = [ x for x in range(1, num) if (num % x == 0) ] # 자기 자신을 제외한 약수 리스트
sum = 0
for i in divisor_list:
sum += i
if sum == num:
return True
else:
return False
input_num = int(input("자연수 N을 입력하세요 : "))
for x in range(1, input_num+1):
if complete_number(x):
print(x)
Python 3.6
class calc_divisor:
def __init__(self, num):
if not(isinstance(num, int)) or num <= 0: raise RuntimeError('자연수를 입력하세요')
self.num = num
def divisor(self):
result = set() # list를 이용할때보다 set이 연산속도가 3~4배 빠름
for x in range(1, int(self.num ** 0.5)+1): # 약수는 제곱근을 기준으로 대칭을 이루기에
if not(self.num%x): # 루프 회수를 줄이는데 이용
result |= {x, int(self.num/x)} # 20000 ** 2의 약수를 구하는데 0.006초 걸릴것이
return result # 전체를 루프하면 200초 가량 걸림
def complet(self):
return True if sum(sorted(self.divisor())[:-1]) == self.num else False
if __name__ == "__main__":
num = input('')
print(tuple(i for i in range(1,int(num)+1) if calc_divisor(i).complet()))
def yak(n):
result = []
for i in range(1, n):
if n % i == 0:
result.append(i)
return result
def perf(n):
result = []
for i in range(1, n+1):
if sum(yak(i)) == i:
result.append(i)
return result
print(perf(100)) #[6, 28]
number = int(input("자연수 n을 입력하세요 : "))
def findNumber(number):
natural = [] #n이하의 모든 자연수 리스트
anwser = [] #완전수 담을 리스트
#0. 입력한 숫자 이하의 모든 정수 리스트 구하기
for k in range(1, number+1):
natural.append(k)
for n in natural:
divisor = [] #약수 담을 리스트
#1. 약수 구하기(1과 자기자신 제외)
t_num = int(n/2)
if t_num < 1:
t_num = 1 #만약 나누는 수가 1보다 작으면 1로 초기화시킴.
while t_num > 0:
if n % t_num == 0:
if n != 1:
divisor.append(t_num)
divisor = list(set(divisor))
t_num -= 1
#2. 약수 더하기
total = 0
for i in divisor:
total += i
#3. 약수합과 원래 숫자 비교하기
if total == n:
anwser.append(n)
n += 1
print(anwser)
findNumber(number)
파이썬입니다.
def perfect(n):
list=[]
for x in range(1,n):
if n%x == 0 : list.append(x)
if sum(list) == n : return True
else : return False
print(perfect(int(input())))
def perfect_number(n):
total = 0
for j in range(1,n):
if(n%j==0): total += j
if(n==total): return True
else: return False
n = int(input())
for i in range(1,n+1):
if(perfect_number(i)): print(i, end=" ")
print()
c언어
#include<stdio.h>
int main()
{
int i ,j;
int input_num;
int sum = 0;
printf("완전수 구하기 \n자연수 N을 입력하면 출력으로 N이하의 모든 완전수를 출력합니다. \n");
scanf("%d", &input_num);
/* n의 약수를 구함
for(j=1; j<=input_num; j++)
{
if(input_num%j==0)
{
printf("%d ", j);
}
} */
for(i=6; i<input_num; i++) // 6미만의 수중에는 완전수가없기떄문에 6부터 시작
{
sum = 0;
for(j=1; j<i; j++)
{
if(i%j==0)
{
sum+= j;
}
}
if(sum == i)
{
printf("%d ", i);
}
}
printf("는 완전수입니다. \n");
}
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
int number, i, j;
int sum;
scanf("%d", &number);
for (j = number; j > 0; j--)
{
sum = 0;
for (i = 1; i < j; i++)
{
if (j%i == 0) sum = sum + i;
}
if (sum == j) printf("%d \n", j);
}
while (getchar() != '\n');
getchar();
}
input_num = input("완전수 구하기 입력으로 자연수 N을 받으면 출력으로 N이하의 모든 완전수를 출력합니다. : ")
sum = 0
for i in range(1, input_num+1):
for j in range(1, i):
if i % j == 0:
sum +=j
if sum == i:
print(i)
sum = 0 # 0 으로 sum의 값을 초기화 시켜 약수들의 합을 초기화시킨다.
a = int(input()) b = [x for x in range(1, a+1) if x == sum(i for i in range(1, x) if x % i == 0)] print(b)
#완전수 구하기.
N = int(input("자연수 N입력:"))
result = []
for i in range(1, N+1):
sum = 0
for j in range(1, i):
if i%j==0:
sum += j
if i == sum:
result.append(i)
print(result)
n=int(input())
res=[]
for i in range(2,n+1):
lst = []
for x in range(1,i):
if i%x==0:
lst.append(x)
elif x==i-1:
if sum(lst)==i:
res.append(i)
print(res)
// Example program
#include <iostream>
#include <string>
#include <set>
using namespace std;
int GetSumOfDivideNumbers(int aNumber)
{
// Get Divide Numbers
set<int> s;
s.insert(1);
for (int i=2; i<aNumber; i++) {
if (aNumber % i == 0) {
s.insert(i);
s.insert(aNumber/i);
}
}
int sum = 0;
set<int>::iterator iter;
for (iter = s.begin(); iter != s.end(); ++iter){
sum += *iter;
}
return sum;
}
bool isCompleteNumber(int aNumber)
{
int sum = GetSumOfDivideNumbers(aNumber);
if (sum == aNumber) return true;
else return false;
}
int main()
{
int input = 2000;
cout << "Complete Numbers are : ";
int i;
for (i = 2; i <= input; i++) {
if (isCompleteNumber(i)) {
cout << i << ", ";
}
}
}
1000까지의 완전수는 Complete Numbers are : 6, 28, 496,
#include <stdio.h>
void main(void)
{
int N, i, j, sum_divisor = 0;
printf("자연수를 입력하시오: ");
scanf_s("%d", &N);
printf("\n%d 이하인 완전수는 다음과 같다.\n", N);
for (i = 1; i <= N; i++) {
for (j = 1; j <= i - 1; j++) {
if (i%j == 0) sum_divisor += j;
} /* sum_divisor 는 i의 약수의 합*/
if (sum_divisor == i) printf("%d\n", i);
sum_divisor = 0;
}
}
C언어로 작성했습니다.
#include <stdio.h>
main()
{
int N,m,i;
printf("자연수 N을 입력하시오.");
scanf("%d",&N);
printf("N 이하의 완전수는 ");
for(m=1;m<=N;m++){
int sum=0;
for(i=1;i<m;i++){
if(m%i==0){
sum=sum+i;
}
}
if(sum==m){
printf("%d ",m);
}
}
printf("\n");
system("pause");
return 0;
}
c로 해봤습니당
import java.util.Scanner;
class CodingDojang {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("자연수를 입력하세요 : ");
int num = input.nextInt();
int sum;
for (int i=2;i<=num;i++){
sum=0;
for (int j=1;j<i;j++){
if (i % j == 0){
sum+=j;
}
}
if (i == sum){
System.out.print(i+" ");
}
}
System.out.println("");
}
}
N = int(input('Input a number: '))
for number in range(1,N+1):
if sum(x for x in range(1,number) if number % x == 0) == number:
print(number)
// ==================================
Scanner sc = new Scanner(System.in);
System.out.print("숫자를 입력해 주세요 : ");
int num = sc.nextInt();
System.out.print(num + " 의 약수는 : ");
for (int i = 1; i < num; i++) {
if (num % i == 0) {
System.out.print(i + " ");
}
}
System.out.println("입니다.");
n=input('input any interger : ')
b=[]
for i in range(1,int(n)+1):
if divide(i)==i:
b.append(i)
print(b)
def divide(x):
a=[]
for i in range(1,x):
if x%i==0:
a.append(i)
return sum(a)
print(b)
파이썬입니다.
import math
result=[]
def perfect_num2(N):
result=[]
#N 이하의 자연수
for i in range (2, N+1) :
sum_j=1
for j in range (2, int(math.sqrt(i))+1) :
if (j*j ==i) :
sum_j+=j
break
elif(i%j==0) :
sum_j+=j
sum_j+=(i/j)
# 약수의 합이 더 클 경우 break
if(sum_j>i) :
break
if(sum_j==i) :
result.append(i)
print(result)
num_list=[]
num_arr=[]
num=int(input("숫자를 입력하시오:"))
for x in range(2,num+1):
for k in range(1,x):
if x%k==0:
num_list.append(k)
if x==sum(num_list):
num_arr.append(x)
num_list=[]
print(num_arr)
insert = int(input()) #28
for indi in range(1+1, insert+1): #2~28
summ = 0
for i in range(1, indi):
if indi % i == 0:
summ += i
if indi == summ:
print(indi)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N = 0;
int i;
printf("N = ");
scanf_s("%d", &N);
int *perfect_number = malloc(sizeof(int)*N);
printf(" 완전수의 약수는 {");
for (i = 1; i < N; i++)
{
if ((N % i) == 0)
perfect_number[i] = i;
if ((N % i) == 0)
printf("%d, ", perfect_number[i]);
}
printf(" } 입니다.");
free(perfect_number);
return 0;
}
import java.util.Scanner;
public class KimSanghyeop
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.print("자연수를 입력하세요 : ");
int num = sc.nextInt();
int f1,f2;
int sum;
for(f1=1;f1<=num;f1++)
{
sum=0;
for(f2=1;f2<f1;f2++)
{
if(f1 % f2 ==0)
{
sum +=f2;
}
}
if(sum == f1)
{
System.out.println(f1);
}
}
}
}
Java 8
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.stream.IntStream;
public class tut07 {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// num1 을 변경하여 값을 구한다.
int num1 = 100000;
List<Integer> list = new ArrayList<>();
System.out.println("Start Time : " + new Date());
ForkJoinPool myPool = new ForkJoinPool(2);
for (int i = 1; i <= num1; i++) {
final int k = i;
myPool.submit(() -> {
if (IntStream.range(1, k).parallel().filter(j -> (k % j) == 0).sum() == k) {
list.add(k);
}
}).get();
}
System.out.println(list);
System.out.println("End Time : " + new Date());
}
}
num = int(input('숫자를 입력하세요: '))
result = [] # 완전수들을 저장할 리스트
for i in range(1, num+1):
sum = 0
for j in range(1, i):
if i % j == 0: # 주어진 수에 대한 약수 값을 찾기
sum += j
if sum == i:
result.append(i) # 완전수를 리스트에 저장
print(result)
void main()
{
int num, sum;
printf("숫자를 입력하세요 : ");
scanf("%d", &num);
for (int i = 1; i <= num; i++)
{
sum = 0;
for (int j = 1; j < i ; j++)
{
if (i % j == 0)
sum += j;
}
if (i == sum)
printf("%d\n", sum);
}
}
num = int(input("자연수 입력 : "))
from math import sqrt
print([x for x in range(2, num+1, 2) if x == (sum(y + (x/y) for y in range(1, int(sqrt(x))+1) if x % y == 0) - x)])
# 입력된 정수 이하의 완전수 구하기
def downer(int):
# 완전수 리스트
per_li = list()
while int > 1:
if int == sumdiv(int):
per_li.append(int)
int -= 1
# 정렬 후 반환
return sorted(per_li)
# 약수의 합 (list comprehension 사용)
def sumdiv(int):
return sum([i for i in range(1, int) if int % i == 0])
def main():
u = int(input("Input integer : "))
print(downer(u))
if __name__ == '__main__':
main()
#include<stdio.h>
int main(void)
{
int max;
printf("완전수 구하기-몇 이하의 수?:");
scanf_s("%d", &max);
int i,j;
int sum = 0;
for (i = 2; i <= max; i++)
{
for (j = i - 1; j >= 1; j--)
{
if (i%j == 0)
{
sum = sum + j;
}
}
if (sum == i)
printf("%d ", sum);
sum = 0;
}
return;
}
perfect_number = int(input())
answer_list = []
for i in range(1, perfect_number):
number = 0
flag = 0
for j in range(1, i):
if i % j == 0:
number += j
if j == i - 1:
if number == i: flag = 1
if flag: answer_list.append(i)
print(answer_list)
namespace codingdojang__
{
class Program
{
static void Main(string[] args)
{
int temp = 0;
int input = int.Parse(Console.ReadLine());
for (int i = 1; i <= input; i++)
{
for (int e = 1; e <= i / 2; e++)
{
if (i % e == 0)
{
temp += e;
}
}
if (temp == i)
{
Console.WriteLine(i);
}
temp = 0;
}
}
}
}
import math
number = int(input())
def divisor_make(n):
divisor_list = set()
for i in range(1, int(math.sqrt(n)) + 1):
if n % i == 0:
divisor_list.add(i)
divisor_list.add(n//i)
divisor_list.discard(n)
return list(divisor_list)
for x in range(1, number + 1):
divisor_sum = 0
for y in divisor_make(x):
divisor_sum += y
if divisor_sum == x:
print(x)
nNum = int(input())
# Check if it is perfect number
def isPerfectN(num):
cSum = 0
for i in range(1, num):
if num % i == 0:
cSum += i
if cSum == num:
return True
else:
return False
perfList = []
for i in range(1,nNum+1):
if isPerfectN(i) == True:
perfList.append(i)
print("Result: ", perfList)
num = int(input())
def perfectnum(num):
result = []
for i in range (2, num+1):
total = 0
for j in range (1, i):
if i % j == 0:
total += j
if total == i:
result.append(i)
return result
print(perfectnum(num))
def PerfectNum(N): #함수로 정의
numList=[]
for x in range(1,N+1): #1부터 N까지
result=0
for a in range(1,x): #1부터 자기자신을 제외한 수까지
if x%a==0:
result+=a
if x==result:
numList.append(x)
return numList
function perfectNum(N){
const result = []
for(let i = 1; i<=N; i++){
let sum = 0;
for(let j = 0; j<=i/2; j++){
if(i%j === 0){
sum+=j
}
}
if(sum === i){
result.push(i)
}
}
return `${N}이하의 완전수는: ${result}`
}
perfectNum(28)
//출력값: '28이하의 완전수는: 6,28'
N = int(input("Input a natural number: "))
result = []
for i in range(1, N + 1):
sum_aliquot = 0
for j in range(1, i):
if i % j == 0:
sum_aliquot += j
if i == sum_aliquot:
result.append(i)
print(result)
Input a natural number: 10000
[6, 28, 496, 8128]
result = []
def perfect_number(N):
for i in range(1, N+1):
sum = 0
for j in range(1, i):
if i % j == 0:
sum += j
if sum == i:
result.append(i)
print(result)
public class PerfectNumber {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("자연수 N의 값을 입력하시오 > ");
int N = sc.nextInt();
perfectnum(N);
}
public static void perfectnum(int N){
int[][] divisor = new int[N+1][N];//divisor[i]에는 i의 약수들을 저장할거임.
for(int i = 2; i<=N; i++){
int count = 0;
for(int j = 1; j<=N; j++){
if(i%j == 0){
divisor[i][count] = j;
count++;
}
}
}
for(int i = 2; i<=N;i++){
int sum = 0;
int j = 0;
while(divisor[i][j] != i){
sum += divisor[i][j++];
}
if(sum == i)
System.out.println(sum);
}
}
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void func(int num) {
int tmp = num;
int sum = 0;
for (int i = 1; i <= tmp / 2; i++) {
if (tmp % i == 0) sum += i;
}
if (num == sum) printf("%d\n", num);
return;
}
int main() {
int num;
scanf("%d", &num);
for (int i = 1; i <= num; i++) {
func(i);
}
return 0;
}
def perfect(num):
summ = 0
for i in range(1,num):
if num % i == 0:
summ += i
if summ == num:
return True
else:
return False
def perfect_number(N):
lst = []
for i in range(1,N+1):
if perfect(i) is True:
lst.append(i)
return lst
answer : perfect_number(10000) [6, 28, 496, 8128]
i1 = input("양수를 입력하세용 : ")
toInt = int(i1)
for i in range(1, toInt + 1) :
wanJeonSu = [j for j in range(1, i) if i % j == 0]
sumOfWan = sum(wanJeonSu)
if sumOfWan == i :
print(i, end=' ')
try:
a = int(input("숫자를 입력하세요: "))
primeNumber = []
for i in range(1,a+1):
mersen = 2**i - 1
gmk = 2**(i-1)
f = gmk*mersen
if i / 2 == 1 or mersen % 2 != 0 and mersen % 3 != 0 and i - 1 != 0:
if a >= f:
primeNumber.append(f)
print(primeNumber)
except:
print("다시입력바람")
import java.util.Scanner;
public class Problem128 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n;
System.out.println("자연수를 입력하시오");
n=scan.nextInt();
scan.close();
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.println(i);
}
}
}
num_range = int(input('자연수 입력:'))
sum=0
for in_num in range(1,num_range+1):
for num in range(1,in_num):
if in_num%num==0:
sum+=num
if sum==in_num:
print(in_num)
sum=0
비쥬얼 스튜디오로 작성했습니다.
#include <stdio.h> //헤더 파일
void main() {
int n;
printf("N을 입력하세요 : ");
scanf_s("%d", &n); // 변수 n의 값을 입력받아서 저장.
for (int i = 1; i <= n; i++) // 1부터 n 까지의 수 중에서 완전수
{ // 찾는 반복문 실행
int sum = 0; //sum은 자기 자신을 제외한 약수의 합을 받는 변수
for (int j = 1; j < i; j++) // 변수 i가 완전수인지 판별하는 반복문
{ // 1부터 자기 자신을 제외한 수까지 반복
if (i % j == 0) // 변수 j가 i로 나누어떨어지면 변수 j는 약수
{
sum += j; // 약수 j의 값을 sum에 합산
}
}
if (sum == i) //만약 약수의 합 sum이 i와 같으면 i 출력
{
printf("%d\n", i); //완전수 출력, 한줄씩 띄워쓰기
} //반복문 종료
}
}
num = int(input('자연수를 입력하세요. :'))
for i in range(1, num + 1):
list = []
for j in range(1, i + 1):
if i % j == 0:
list.append(j)
else:
pass
if sum(list) - i == i:
print(i, end= ',')
def find_complete_num(n):
return [x for x in range(1,n) if x ==sum([i for i in range(1,x) if x%i==0])]
def C(n):
s = 0
for i in range(1, n):
if n%i == 0:
s += i
return s
def CN_list(N):
L = []
for i in range(1, N+1):
if C(i) == i:
L.append(i)
return L
print(CN_list(30))
def find_diviser(num):
result = []
for i in range(1, num):
if num % i == 0:
result.append(i)
print(result)
return result
def find_perfect_number(num):
divisers = find_diviser(num)
if sum(divisers) == num:
return True
return False
user_input = int(input("Enter a number: "))
print(find_perfect_number(user_input))
a = int(input())
c= []
for i in range(1, a+1):
b= []
for j in range(1, i):
if i % j == 0:
b.append(j)
if sum(b) == i:
c.append(i)
print(c)
모든 약수의 합 - 자기자신을 구하는 문제이므로 에라토스테네스의 체를 사용하여 소인수분해를 하여 약수의 개수를 구하였고 약수의 개수를 통해 약수의 합을 구할 수 있다. ex) 6 = 2^1 * 3^1 => 약수의 합 (2^0 + 2^1)(3^0 + 3^1) = 12 이와 같은 과정으로 완전수인지 아닌지를 구한다. 시간복잡도는 에라토스테네스의 체가 O(nloglogn)
#include <iostream>
#include <cstring>
#include <cmath>
#include <map>
using namespace std;
int main()
{
int eratos[1000000];
int N;
scanf("%d", &N);
memset(eratos, 0, sizeof(int) * (N+1));
eratos[0] = -1;
eratos[1] = -1;
for(int i = 2 ; i <= N ; i++)
eratos[i] = i;
int sqrtn = int(sqrt(N));
for(int i = 2; i < sqrtn ; i++)
{
if(eratos[i] == i){
for(int j = i*i ; j <= N; j+=i)
{
if(eratos[j] == j)
eratos[j] = i;
}
}
}
for(int i = 2; i <= N ; i++)
{
int cur_i = i;
map<int, int> hash;
pair<map<int, int>::iterator, bool> ret;
while(cur_i > 1)
{
ret = hash.insert(make_pair(eratos[cur_i], 1));
if(!ret.second)
{
hash[eratos[cur_i]]++;
}
cur_i /= eratos[cur_i];
}
int sum = 1;
int tmp_sum;
for(auto iter = hash.begin(); iter != hash.end(); iter++)
{
tmp_sum = 0;
while(iter->second >= 0)
{
tmp_sum += pow(iter->first,(iter->second)--);
}
sum *= tmp_sum;
}
if(sum == 2 * i)
cout << i <<endl;
// else
// cout << sum << endl;
}
return 0;
}
N=int(input())
Factor=[]
for n in range(1,N+1):
factor=[]
for i in range(1,n):
if n%i==0:
factor.append(i)
if sum(factor)==n:
Factor.append(n)
print(Factor)
다만, 완전탐색으로 구현해내서인지 입력이 커질수록 계산횟수가 엄청나게 많아져서 시간이 오래걸리는게 흠이네요;;
perfect_num = int(input('자연수를 입력하시오: '))
pn_list = []
for i in range(1, perfect_num):
sum = 0
for j in range(1, i):
if i%j == 0:
sum += j
if i == sum:
pn_list.append(i)
print(pn_list)
N = int(input())
x=0; pef_n = []
for num in range(1, N+1) :
x=0
for i in range(1, (num//2)+1) :
if num%i == 0 :
x+=i
if num == x :
pef_n.append(num)
print(pef_n)
이제 풀이봐야지..
python 3.6
N = eval(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])])
해놓고 보니까 젤 위에 답이랑 똑같았음.
N = int(input('Enter the Number: ')) # 입력받아 정수형으로 저장
perfectNum = [] # 완전수 빈 리스트 생성
for i in range(2, N+1): # 입력받은 수까지 반복문 실행(1은 제외)
sum = 1 # 약수 합 저장 변수
j=2 # 약수 구하기 위해 반복문 돌릴 시작수
chkNum = int(i / 2) # 약수 체크할 최대 수 (시간을 줄이기 위함)
while j < chkNum:
if i % j == 0: # 약수인지 확인
chkNum = i//j # 약수 체크할 최대 수 업데이트
sum += j + chkNum # 약수 합 저장 (몫, 나눈 수)
j += 1 # 약수 체크 수 업데이트
if sum == i: # 완전수인지 확인
perfectNum.append(i) # 완전수 리스트 업데이트
print(perfectNum) # 출력
파이썬 3.7 사용.
def isPerfectNum(n): #n이 완전수이면 True, 아니면 False
middle_point=int(n/2)
sum=0
for a in range(1, middle_point+1): #n/2 이하까지만 보면 충분
if n%a==0:
sum+=a #n의 자기자신을 제외한 약수들의 합
if sum==n:
return True
else:
return False
if __name__=="__main__":
while(True):
inputstr=input('자연수를 입력하세요: ')
try:
N=int(inputstr)
if N>0:
break
except:
print('입력 에러. 다시입력하세요\n')
result=[]
for num in range(1,N+1):
if isPerfectNum(num):
result.append(num)
print(result)
data = int(input())
result = []
for i in range(1, data + 1):
sum = 0
for j in range(1, i):
if i % j == 0:
sum += j
if i == sum:
result.append(i)
print(result)
in_num = int(input()) perfect_num = ""
for num in range(1,in_num+1): div = [x for x in range(1,num) if num%x == 0] ''' div_sum = 0
for x in div:
div_sum += x
'''
div_sum = sum(div)
if div_sum == num:
perfect_num += (str(num)+" ")
print(perfect_num)
N = int(input('Enter upper bound : '))
divisorSum = 0
for n in range(1, N) :
for i in range(1, n) :
if n % i == 0 :
divisorSum += i
if n == divisorSum :
print(n, end = ' ')
divisorSum = 0
def DashInsert(num):
result = []
for i in range(2,num+1):
t = []
for j in range(1,i):
if i % j == 0:
t.append(j)
if sum(t) == i:
result.append(i)
return result
print(DashInsert(10000))
약수들의 합을 구하는 함수 먼저 만들고 그 뒤 N이하 완전수를 출력했습니다.
def SumOfFactors(N):
s = 0
for i in range(1, N):
if N % i == 0:
s += i
return s
def Perfect(N):
r = []
for x in range(1, N+1):
if SumOfFactors(x) == x:
r.append(x)
return r
import java.util.Scanner;
public class perfectNum {
static boolean isPerfect (int n) {
int sum=0;
sum+=1;
for(int i=2; i<=Math.sqrt(n); i++) {
if(n%i==0) {
sum+=i;
if(i<Math.sqrt(n)) {
sum+=n/i;
}
}
}
if(n==sum) return true;
else return false;
}
static void printPerf(int n) {
for(int i=3; i<=n; i++) {
if(isPerfect(i)) {
System.out.print(i + " ");
}
}
System.out.println("");
}
static int num ;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
num=sc.nextInt();
if(num>2) break;
System.out.println("2보다 큰 정수를 입력하세요.");
}
sc.close();
printPerf(num);
System.out.println("프로그램을 종료합니다.");
}
}
python
N = int(input()) # 임의의 자연수 N 입력
complete_N = []
for i in range(1,N+1):
s = []
for k in range(1,i):
if i % k == 0:
s.append(k) # 숫자 i에 대한 약수를 구해 리스트 s에 집어넣음
if sum(s) == i: # 완전수의 조건 확인
complete_N.append(i)
print(complete_N)
def perfectNum(num): listA=[] #sums=0
for nums in range(2, num+1):
sums=0
for div in range(1, nums):
if(nums%div==0):
sums+=div
if(nums==sums):
listA.append(nums)
return listA
lists=perfectNum(30) print(lists) ```
%MATLAB
%자연수 N이하 완전수를 출력
N=input('자연수N 이하 완전수를 출력하기 위해 N을 입력하세요 : ');
com_num=[];
m=1; % m은 추후 완전수를 배열에 저장하는데 쓰임.
for l=2:1:N-1 %자연수의 약수를 구하는 for문과 약수를 배열에 저장하는 if문을%N이하 자연수에 대해 반복수행하기 위한 for 문
n=1;div=[];
for k=1:1:l-1 %약수를 구하기 위한 for문
if mod(l,k)==0
div(n)=k;
n=n+1;
end
end
if sum(div)==l %위에서 구한 약수를 배열에 저장하는 if 문
com_num(m)=l;
m=m+1;
end
end
disp ('N이하 자연수 중 완전수는');
disp(com_num);
n=int(input("자연수 입력:"))
a=[]
b=[]
for i in range(1,n+1):
for j in range(1,i+1):
if i%j==0:
a.append(j)
if i==sum(a)-i:
b.append(i)
a.clear()
else:
a.clear()
print(b)
def abs(n,i,res):
if (n//2)+1 <= i:
return
if n%i==0:
res.add(i)
abs(n,i+1,res)
return sum(res)
def prob(num):
for i in range(1,num+1):
temp=set()
if abs(i,1,temp) == i:
print(i)
prob(29)
def is_perfect(n):
d = [1]
for i in range(2, int(n**0.5)+1):
if n%i==0: d.append(i); d.append(n//i)
if sum(d) == n: return True
else: return False
def print_num(n):
l = list(filter(is_perfect, list(range(2, n+1))))
for x in l: print(x, end=' ')
num = int(input('Enter the num: '))
print_num(num)
def Perfect(num):
k = 0
divisor = []
for i in range(1, num):
if num%i == 0:
divisor.append(i)
k = sum(divisor)
if k == num:
return True
else:
return False
a = int(input())
for i in range(1, a+1):
if Perfect(i):
print(i)
def _absolute(num) :
nums=[]
for b in range(1,num+1):
#print("b:"+str(b))
sum=0
for a in range(1,b):
#print("a"+str(a))
if b%a==0:
sum+=a
#print("sum"+str(sum))
if sum == b:
#print("추가")
nums.append(sum)
print(nums)
_absolute(10000)
result = list() N = int(input("자연수를 입력해주세요 : "))
for j in range(1,N+1): sum = 0 for i in range(1,j) : if j % i == 0 : sum += i if sum == j : result.append(j)
print(result)
var a=prompt('숫자를 하나 입력해주세요. 입력한 숫자보다 작은 완전수를 출력합니다.')
var 완전수=[];
for(var i=1;i<a;i++){
var 약수합 =0;
for(var j=1;j<i;j++){
if(i%j===0){
약수합 += j
}
}
if(i===약수합){
완전수.push(i);
}
}
alert('a 이하의 완전수는'+완전수+'가 있습니다.')
PHP
$n = 10000;
$fn = function(int $num) : bool {
$arr = [];
foreach (range(1, $num) as $i) {
if ($num !== $i && $num % $i === 0) $arr[] = $i;
}
return $num === array_sum($arr);
};
$result = [];
foreach (range(1, $n) as $i) {
if ($fn($i)) $result[] = $i;
}
print_r($result); // [6, 28, 496, 8128]
intNum = int(input("숫자를 입력하세요 : "))
print([y for y in range(1, intNum) if y == sum([x for x in range(1, y) if y % x == 0])])
N = int(input())
def hoho(N):
answer = [x for x in range(1,N+1) if x==sum(y for y in range(1,x) if x%y==0)]
return answer
print(hoho(100))
// 자연수 n = 200으로 입력
int n = 200, i=1;
StringBuffer sb = new StringBuffer();
for(i=1; i<=n; i++) {
if(200%i == 0) {
String str = (i<n)?", ":"";
sb.append(i+str);
}
}
sb.toString();
System.out.println(sb);
답 : 1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 200
value = int(input("완전한 수 : "))
def Gongyacsu(num):
result = []
for i in range(1,num):
if num % i == 0:
result.append(i)
total = sum(result)
if total == num:
return total
else :
return False
for a in range(1,value+1):
if Gongyacsu(a):
print(a)
else :
pass
n = int(input('자연수 N : '))
ans = []
def factor(k):
n_list = []
for i in range(1, k//2+1):
if k%i==0:
n_list.append(i)
if sum(n_list) == k:
return k
else:
return False
for i in range(1, n):
if factor(i):
ans.append(i)
print(ans)
파이썬 완전수 계산하는데 시간이 많이 걸리기에 나누는 횟수를 줄여봤습니다.
# Perfect Number
n = int(input("Input number = "))
perfect_num = []
if n < 6:
print("There isn't a perfect number")
else:
for i in range(6, n+1):
sum = 1
m_factor = i
div = 2
while div < m_factor:
if i % div == 0:
m_factor = i // div
sum = sum + div + m_factor
div += 1
if i == sum:
perfect_num.append(i)
print(perfect_num)
package practiceLv1;
import java.util.*;
public class 완전수구하기 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
ArrayList<Integer> 완전수_list = new ArrayList<Integer>();
for(int i=2; i<=num; i++) {
int sum = 0;
ArrayList<Integer> num_list = new ArrayList<Integer>();
for(int j=1; j<i; j++) {
if(i%j==0) {
num_list.add(j);
}
}
for(int k = 0; k<num_list.size(); k++) {
sum=sum+num_list.get(k);
}
if(sum==i) {
완전수_list.add(i);
}
num_list.clear();
}
System.out.println(완전수_list);
}
}
#include <iostream>
using namespace std;
int main(){
int n,temp=0;
cin>>n;
for(int i=2;i<=n;i++){
for(int j=1;j<i;j++){
if(i%j==0)
temp+=j;
}
if(i==temp)
cout<<i<<" ";
temp=0;
}
}
파이썬 입니다.
input_num=int(input("정수를 입력하세요 : "))
for i in range(1,input_num+1):
ssum=0 # 약수합을 0으로 초기화 시켜준다.
for j in range(1,i): # 이 단계에서 자기자신을 제외한 약수를 찾고
if i%j == 0:
ssum += j # 약수 전부를 더한다.
if ssum == i:
print(i,end=' ')
파이썬 3.6 입니다
def get_perfect_numbers(n):
result = []
for candidate_no in range(1, n + 1):
divisor = [i for i in range(1, candidate_no) if candidate_no % i == 0]
if sum(divisor) == candidate_no:
result.append(candidate_no)
return result
파이썬입니다.
num = int(input('숫자를 입력하시오: '))
result = []
for a in range(1,num+1):
sum = 0
for b in range(1, a):
if a % b == 0:
sum += b
if a == sum:
result.append(sum)
result
int *PerfectNumber(int N)
{
int tempResult[] = new int;
int sizeArray = 0;
int counter1 = 0;
int counter2 = 0;
while(N >counter1)
{
counter1++;
for(int i = 1; i< N; i++)
{
for(int j =1; j<i;j++)
{
i%j == 0 ? counter2 += i : 0;
}
counter2 == i ? tempResult[sizeArray] = counter2, sizeArray++, counter2 =0: 0;
}
}
int result[sizeArray];
for(int i =0; i<sizeArray;i++)
{
result[i] = tempResult[i];
}
delete tempResult;
return result;
}
n=int(input("양의 정수 n을 입력하십시오: "))
k=2 #1의 약수는 하나뿐인데 자기 자신을 제외해야 하므로 약수가 1개 이상인 2부터 시작
while k<=n:
elst=[] #약수를 삽입할 빈 리스트 생성
for num in range(1,k): #k인 자기 자신을 약수에서 제외해야하므로 k+1이 아니라 k
if k%num==0:
elst.append(num)
if sum(elst)==k:
print(k,"완전수입니다.")
k+=1
def aliquot(num):
n = 1
for i in range(num+1):
if (num%n==0):
empty.append(n)
n += 1
stdNum = int(input("StandardNumber: "))
cnt =2
while(cnt<=stdNum):
empty=[]
aliquot(cnt)
answer = sum(empty)
if cnt == answer-cnt:
print(cnt)
cnt += 1
N=int(input("N="))
result=[]
sum=0
a=1
b=1
for a in range(1,N):
for b in range(1,a/2):
if a%b==0:
sum=sum+b
if sum==a:
result=result+[a]
print(result)
a = int(input("숫자를 입력: "))
b = []
c = []
for m in range(1, a+1):
for i in range(1, m):
if m%i == 0 :
b.append(i)
if m == sum(b):
c.append(m)
b = []
print(c)
N,Nlist,Nfinishlist = int(input()), list(), list()
for i in range(1,N+1):
for j in range(1,i):
if i%j == 0:Nlist.append(j)
if sum(Nlist) == i:Nfinishlist.append(i)
Nlist = list()
print(Nfinishlist)
import java.util.Scanner;
public class PerfectNumber {
public static void main(String[] args) {
Scanner Sc = new Scanner(System.in);
int sum = 0;
System.out.print("숫자를 입력하시오 :");
int input = Sc.nextInt();
for(int i = 1; i<=input; i++) {
for(int j =1; j<i; j++) { //약수 구하기 및 약수의 합
if((i%j)==0) {
sum+=j;
}
}
if(sum==i) {
System.out.print(i+" "); //결과값 출력
}
sum = 0; //sum 초기화
}
Sc.close();
}
}
파이썬입니다
약수의 리스트를 반환하는 함수를 정의한 다음 풀었습니다
N = int(input())
def factor(n):
if n == 1:
return [1]
elif n == 2:
return [1, 2]
f = {1, n}
for m in range(2, int(n ** 0.5) + 1):
if n % m == 0:
f |= {m, n // m}
f = sorted(list(f))
return f
print('{}이하의 모든 완전수: '.format(N))
for i in range(1, N + 1):
if sum(factor(i)) == 2*i:
print(i)
num=int(input('Enter number: '))
com_num=[]
for i in range(1,num+1):
sum=0
for j in range(1,i):
if i%j==0:
sum+=j
if i==sum:
com_num.append(i)
print(com_num)
a = int(input('Enter the nunber:'))
for i in range(1,a+1):
yaksu = 0
for j in range(1,i+1):
if i%j == 0 :
yaksu += j
else: continue
if i == yaksu - i:
print (i,yaksu-i)
python 3.8
x=int(input("적당한 숫자를 입력하시오. : "))
print(list(n for n in range(1,x) if sum( i for i in range(1,n) if n % i == 0) == n))
x=int(input("적당한 숫자를 입력하시오. : "))
a=[]
for n in range(1,x):
sum=0
for i in range(1,n):
if n % i == 0:
sum=sum+i
if sum == n :
a.append(sum)
print(a)
int main() { while(1) { int n; int result = 0;
printf("숫자를 입력하시오 > "); scanf(" %d", &n);
for (int i = 1; i < n; i++)
{
if (n % i == 0)
{
result += i;
}
}
if (n == result)
{
printf("%d는 완전수 입니다.\n\n", n);
}
else
{
printf("%d는 완전수가 아닙니다.\n\n", n);
}
}
return 0;
} // C로 코딩했습니다.
def perfectN(N):
N = int(input('숫자를 입력하세요:'))
answer = []
for j in range(2, N+1):
if sum([i for i in range(1, int(j/2+1)) if j % i == 0]) == j:
answer.append(j)
return answer
파이썬 3.8
n = int(input('자연수 입력 : '))
for i in range(1,n+1):
t = i//2
sum = 0
for j in range(1,t+1):
if i%j==0:
sum +=j
if sum == i:
print(i)
A= int(input()) print([x for x in range(1, A+1) if x==sum(y for y in range(1, x) if x%y==0)])
위에서 박 시우 님이 하신 코딩을 참고했습니다.
N = int(input())
result=[]
for i in range(1,N):
l=[]
for j in range(1,i):
if i%j==0:
l.append(j)
if i == sum(l):
result.append(i)
print(result)
def low_per(number):
prp=[]
for i in range(1, number+1):
sum_p=0
for j in range(1, i):
if i%j==0:
sum_p+=j
if sum_p==i:
prp.append(i)
return prp
print(low_per(1000))
n=int(input())
for a in range (1,n+1):
k=0
num=[]
while (k<a):
k=k+1
if a%k==0:
if a!=k:
num.append(k)
if (sum(num)==a):
print (a,'......',num)
# 코딩도장 완전수 구하기 문제
# 완전수란 자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수
# 자연수 N을 받고 N이하의 모든 완전수를 출력하는 코드를 작성하라
def divisors_sum(num): # num을 넣으면 약수의 합을 구해는 함수
i = 2
total = {1}
loop = num ** 0.5
while i <= loop:
if num % i == 0:
total.add(i)
total.add(num / i)
i += 1
return sum(total)
N = input('원하는 자연수 N을 입력하세요 : ')
for i in range(6, int(N)+1): # 6이 가장 작은 완전수 이기 때문에
if divisors_sum(i) == i: # sum이 자기 자신과 같은 경우가 완전수
print(i)
#Perfect Number Finder by Python
N=int(input("Input a Number: "))
sum=0
Answer_list=[]
for i in range(1,N+1):
for j in range(1,i+1):
if i%j==0:
sum+=j
if sum==2*i:
Answer_list.append(i)
sum=0
print(Answer_list)
input_number = int(input("숫자를 입력하세요: "))
result = 0
for i in range(1, input_number+1):
for j in range(1, i):
if i % j == 0 :
result += j
if i == result :
print(i)
result = 0
def perfect_number(n):
result = []
for j in range(1, n + 1):
list_n = []
for i in range(1, j + 1):
if j % i == 0 and j != i:
list_n.append(i)
list_sum = sum(list_n)
if list_sum == j:
result.append(j)
return result
print(perfect_number(6))
print(perfect_number(28))
#include <iostream>
#include <vector>
using namespace std;
/*
자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다.
예를 들면, 6과 28은 완전수이다. 6=1+2+3 // 1,2,3은 각각 6의 약수
28=1+2+4+7+14 // 1,2,4,7,14는 각각 28의 약수
입력으로 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.
*/
void Func(int n) {
vector<int> v;
int sum;
for (int i = 1; i <= n; i++) {
sum = 0;
for (int j = 1; j < i; j++) {
if (i%j == 0) { v.push_back(j);}
}
if (v.size() > 0) {
for (int j = 0; j < v.size(); j++) {
sum += v[j];
}
}
if (sum == i) {
cout << i << " = ";
for (int j = 0; j < v.size(); j++) {
if (j == v.size() - 1) { cout << v[j] << endl; }
else { cout << v[j] << " + "; }
}
}
v.clear();
}
}
int main() {
Func(28);
}
l=[]
p=[]
N=10000
for k in range(2,N):
for i in range(1,k):
if k%i==0:
l.append(i)
else:
pass
if sum(l)==k:
p.append(k)
l=[]
else:
l=[]
pass
print(p)
n_list = list()
n_sum = 0
n = int(input())
perfect_no = list()
for k in range(1,n+1):
for i in range(1,k):
if (k%(k-i))==0:
n_list.append(k-i)
for j in n_list:
n_sum += j
if n_sum == k:
perfect_no.append(k)
n_list = list()
n_sum = 0
print(perfect_no)
python 코드가 길어서 그런지 속도가 엄청 느리네요.
num = int(input("숫자: "))
lists = []
for x in range(1,num+1):
list = []
for y in range(1,x+1):
if x%y == 0: # 10%1 10%2 10%3 10%4 10%10
list.append(y)#list = [1,2,5,10]
list.remove(x)
if sum(list) == x:
lists.append(x)
print(lists)
def p(N):
for j in range(1, N+1): # j 는 자연수N 이하의 숫자 대입
h = 0 # h = 합을 저장
for i in range(1, j):
if j % i == 0: # 나누어 떨어지면 합에 저장하기
h += i
if j == h:
print(j, end=' ')
p(10000)
n=int(input('숫자 입력: '))
mm=[]
for i in range(1,n):
sum1=0
for j in range(1,i-1):
if i%j==0:
sum1+=j
else: pass
if sum1==i:
mm.append(i)
else: pass
print(mm)
import java.util.ArrayList;
import java.util.Scanner;
public class Q128 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
ArrayList<Integer> pn = new ArrayList<Integer>();
for (int i = 1; i < n+1; i++) {
int sum = 0;
for (int j = 1; j < i; j++) {
if ((i % j) == 0) sum += j;
}
if (i == sum) {
pn.add(i);
}
}
System.out.println(pn);
scan.close();
}
}
input = input("number?")
component = []
for j in range(1, int(input)):
temp = []
for i in range(1, j):
if j % i == 0:
temp.append(i)
sum = 0
for i in temp:
sum += i
if sum == j:
component.append(sum)
print(component)
def perfect_nums(n):
def check_perfect(x):
factors = [i for i in range(1, x) if x % i == 0]
return sum(factors) == x
return [i for i in range(1, n + 1) if check_perfect(i)]
Clojure를 이용하여 간단하게 한 번 만들어 봤습니다.
(print(filter #(= %(apply +(filter(fn[n](= 0(rem % n)))(range 1 %))))(range 2(inc(read)))))
a = int(input())
insu = []
complete = []
for j in range(1,a+1):
globals()['insu{}'.format(j)] = []
i = 1
while i < j:
if j%i == 0:
globals()['insu{}'.format(j)].append(i)
i += 1
else:
i += 1
if sum(globals()['insu{}'.format(j)]) == j:
complete.append(j)
print("%d 이하의 완전수는:%s"%(a,complete))
#약수구하기
def numbers(n):
nlist=[]
for i in range (1,n+1):
if n%i==0:
nlist.append(i)
nlist.append(n//i)
else:
pass
nlist1=list(set(nlist))
nlist1.sort()
return nlist1
N=int(input())
for x in range (1,N+1):
numberslist=numbers(x)
answer=0
for i in numberslist:
answer+=i
if answer==x*2:
print(x)
else:
pass
input_temp=int(input())
perfect_num=[]
for i in range(2,input_temp+1) :
temp=[]
sum_temp=0
for j in range(1,i) :
if i%j==0:
temp.append(j)
for k in range(0,len(temp)) :
sum_temp+=temp[k]
if sum_temp==i:
perfect_num.append(i)
print(perfect_num)
구해지긴하지만 입력받는 숫자가 커질 시 심하게 느려지네요!
for x in range(1,num+1):
sum = 0
for y in range(1,x+1):
if x % y == 0:
sum += y
if sum - x == x:
num_list.append(x)
else:
pass
else:
pass
print(num_list)
한줄에 표현하신 분들 리스펙합니다..
while True:
N = input("숫자를 입력하시오: ")
try:
N = int(N)
break
except:
print("다시 입력하시오.")
def nature(N):
A=list()
for num in range(1,N):
if N%num ==0:
A.append(num)
if sum(A) == N:
return True
else:
return False
def findnature(N):
for i in range(1,N+1):
if nature(i)==True:
print(i)
findnature(N)
N에 10000을 입력한 결과 6, 28, 496, 8128이 나옵니다.
def get_aliquots(N):
aliquots = []
for n in range(1, N):
if N % n == 0:
aliquots.append(n)
return aliquots
N = int(input('Enter number:'))
perfect_number = []
for n in range(2, N+1):
if sum(get_aliquots(n)) == n:
perfect_number.append(n)
print(perfect_number)
public class Test{
public static void main(String[] args) {
int count;
ArrayList<Integer> divisor = new ArrayList<>();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.close();
for(int i = 1; i <= n; i++) {
for(int j = 1; j < i; j++) {
if(i % j == 0) divisor.add(j);
}
count = 0;
for(int e : divisor) {count += e;}
if(i==count) {System.out.print(i+" ");}
divisor.clear();
}
}
}
import java.util.*;
public class test4 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("자연수를 입력 하십시오 : ");
int num = scanner.nextInt();
for(int a = 1; a < num ; a++) {
if(kanzensuu(a)) System.out.print(a+",");
}
}
public static boolean kanzensuu (int input) {
int temp = 0;
for(int x = 1; x < input; x++) {
if(input % x == 0){
temp += x;
}
}
return (temp == input);
}
}
namespace _60일차_9월30일
{
class MainApp
{
//6=1+2+3 // 1,2,3은 각각 6의 약수 28=1+2+4+7+14 // 1,2,4,7,14는 각각 28의 약수
public static List<int> Result(int num)
{
List<int> Data = new List<int>();
for(int i = 1; i < num; i++)
{
if (num % i == 0)
Data.Add(i);
else continue;
}
return Data;
}
static void Main(string[] args)
{
Console.Write("Number Input : ");
string input = Console.ReadLine();
foreach(int result in Result(int.Parse(input)))
{
Console.Write($"{result} ");
}
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("숫자입력 : ");
int number = sc.nextInt();
for(int i = 1; i < number+1; i++) {
int sum = 0;
for(int j = 1; j < i; j++) {
if(i%j == 0) {
sum += j;
}
}
if(sum == i) {
System.out.printf("%d는 완전수 \n", i);
}
}
}
def perfect(n = 0):
b = []
for i in range(2,n+1):
a = []
for j in range(1,i):
if i % j == 0:
a += [j]
sums = sum(a)
if sums == i:
b += [i]
return print(b)
n=int(input())
for i in range(2,n+1):
s_num=0
for j in range(1,i):
if i%2==0 and i%j==0:
s_num+=j
if i==s_num:
print(i)
class NumberFinder:
def __init__(self):
self.result = []
def searchNumber(self,n):
for i in range(2,n+1):
divn = []
for j in range(1,i):
if i%j==0:
divn.append(j)
if sum(divn)==i:
self.result.append(i)
return self.result
a = NumberFinder()
b = a.searchNumber(10000)
print(b)
파이썬입니다
number = int(input('Please input natural number: '))
perfect_num = []
for num in range(1, number):
i_list = []
for i in range(1, num):
if num % i == 0:
i_list.append(i)
if sum(i_list) == num:
perfect_num.append(num)
print('perfect number is: ')
for num in perfect_num:
print(num)
def perf_num(N):
perf = []
for i in range(1,N+1):
aliquot = []
for j in range(1,i):
if i%j==0:
aliquot.append(j)
if sum(aliquot) == i:
perf.append(i)
return perf
N=10000
print(perf_num(N))
#한줄버전
print([i for i in range(1,N+1) if sum([j for j in range(1,i) if i%j==0])==i])
def yaksu(num):
result = []
for i in range(1,num):
if num % i == 0:
result.append(i)
return result
num = input('INPUT:')
for i in range(1,int(num)):
if sum(yaksu(i)) == i:
print(i)
package codeDojang;
import java.util.Scanner;
public class Prac {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num=0;
num = sc.nextInt();
int cnt=0;
for(int i=1;i<=num;i++) {
int sum=0;
for(int j=1;j<i;j++) {
if(i%j==0) {
sum+=j;
}
}
if(sum==i) {
System.out.println(i);
}
}
}
}
def perfectNumber(n):
divisor = []
for i in range(1, n + 1):
divisor.append(getDivisor(i))
i = 0
result = []
while i < n:
if sum(divisor[i]) == i + 1:
result.append(i + 1)
i += 1
print(result)
def getDivisor(n):
temp = []
for i in range(1, n + 1):
if n % i == 0:
temp.append(i)
temp.pop()
return temp
perfectNumber(500)
def divisor(a):
lst = []
for i in range(1, a-1):
if a % i == 0:
lst.append(i)
return lst
N = input("자연수 N 입력: ")
for i in range(1, int(N)):
if sum(divisor(i)) == i:
print(i)
제곱근을 이용해서 효율적으로 하신다는데... 무슨말씀이신지 전 이해가 안가네요 ㅜㅜ
peerr=int(input("write your number : "))
for i in range(1,peerr+1,1):
a=[]
k=0
for j in range(1,i,1):
if i%j==0:
k=k+j
if k==i:
print("{0} : This number is Perfect Number".format(i))
import java.util.ArrayList;
import java.util.Scanner;
public class pro7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("범위를 입력하시오.");
int a = sc.nextInt();
ArrayList<Integer> re = new ArrayList<Integer>();
for(int j=1; j<a; j++) {
int sum = 0;
for(int i=1; i<j; i++) {
if(j%i==0) {
sum += i;
}
}
if(sum==j)
re.add(j);
}
for(int i=0; i<re.size(); i++)
System.out.println(re.get(i));
sc.close();
}
}
def yaksu(num):
c = 2
yakarr = [1]
while 1:
if(num <= c):break
elif(num % c == 0):
if(c < (num //c)):
yakarr.append(c)
yakarr.append(num // c)
elif(c == (num // c)):
yakarr.append(c)
break
else: break
c += 1
return yakarr
n = int(input())
for i in range(2, n+1):
result = yaksu(i)
if(i == sum(result)): print(i, end = " ")
윤태호님 아이디어를 보고 짜봤지만 계산수를 더 줄일수있었다..
n = int(input("자연수 n을 입력하세요. :"))
for i in range(2, n+1):
temp = []
for j in range(1, i):
if i % j == 0:
temp.append(j)
if sum(temp) == i:
print(i, temp)
파이썬으로 작성했습니다.
2부터 n까지 각각의 수(i)에 대한 약수(j)의 리스트를 구하고 그 합이 각각의 수(i)와 같을 때만을 출력하는 코드입니다.
def pn(n):
result = []
for i in range(2,n+1):
if sum([x for x in range(1,i) if i%x==0])==i:
result.append(i)
return result
num = int(input("자연수 N을 입력하세요:"))
for i in range(1, num + 1):
total = 0
for j in range(1, i):
if i % j == 0:
total += j
if total == i:
print(i)
def func(a) :
result = []
#약수를 담을 그릇
for x in range(2,a) :
num = []
for y in range(1,x):
if x % y == 0 :
num.append(y) #num에 약수를 넣었고
if sum(num) == x:
result.append(x)
return result #result값은 N이하의 완전수 list 혹은 empty
print(func(10000))
Python Code
Num=int(input("Enter the Number: "))
answer =[]
for i in range(1, Num+1):
sumNum =0
for j in range(1,i):
if i%j ==0:
sumNum += j
if sumNum == i :
answer.append(i)
print("Perfect Number(s): ", end="")
print(*answer)
파이썬으로 약수를 구하는 반복문을 이용해서 만들었습니다.
N = int(input('자연수 입력\n'))
perfect_num = []
for i in range(1, N+1):
divisors = []
for j in range(1, i):
if i%j == 0:
divisors.append(j)
if sum(divisors) == i:
perfect_num.append(i)
print(perfect_num)
result = []
def test(num):
for i in range(1,num+1):
count = 0
for j in range(1,i):
if i % j ==0:
count += j
if i == count:
result.append(i)
print(result)
NUM = int(input("자연수를 쓰세요"))
A = []
for i in range(1,NUM+1):
sum=0
for a in range(1,i):
if i%a==0:
sum+=a
if i == sum:
A.append(i)
n = int(input('숫자 입력: '))
def complete_number(x):
div = [i for i in range(1, x) if x % i == 0]
return True if sum(div) == x else False
for i in range(1, n+1):
if complete_number(i):
print(i)
N = input('Number? :')
N = int(N)
Num_list = []
for i in range(1,N+1):
sum = 0
for j in range(1,i):
if i%j == 0:
sum += j
if sum == i:
Num_list.append(i)
print(Num_list)
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("자연수 >> ");
while (true) {
int n = s.nextInt();
if (n >= 1)
numbersLessThan(n);
else {
System.out.println("error");
break;
}
System.out.println();
System.out.print("자연수 >> ");
}
s.close();
}
public static int[] getDivisors(int n) {
int i = 1;
int count;
for (count = 0; i < n; i++) {
if (n % i == 0)
count++;
}
i = 1;
int[] result = new int[count];
for (int index = 0; i < n; i++) {
if (n % i == 0) {
result[index] = i;
index++;
}
}
return result;
}
public static boolean isPerfect(int n) {
int[] divisors = getDivisors(n);
int sum = 0;
for (int i = 0; i < divisors.length; i++)
sum += divisors[i];
if (sum == n)
return true;
else
return false;
}
public static void numbersLessThan(int n) {
for (int i = 1; i <= n; i++) {
if (isPerfect(i))
System.out.print(i + " ");
}
}
}
num = int(input())
for i in range(1,num):
sum = 0
for k in range(1,i):
if i%k == 0:
sum += k
if sum == i:
print(f"입력받은 숫자는{num} 이며, 완전수는 {sum} 입니다.")
이제 점프 투 파이썬 걸음마 아장아장 하는 응애 나 애기 파이썬 수준 입니다.
처음엔 특정한 수가 완전수인지 판별하는 프로그램을 짰습니다. 그런데 요구하는 바는 n 이하의 모든 완전수를 나열하는 문제더군요. 그래서 for문에 for문을 겹쳐도 되나? 싶어서 시도해봤지만, 에러가 발생하거나 결과가 이상한듯 잘 안되더라구요.
그렇다고 기존에 만들어놓은 완전수판별기가 너무 아까워서 얘를 함수로 퉁 쳐버리고 이걸 계속 돌리는 프로그램으로 만들어봤습니다. 테스트로 10000을 넣어봤더니 정확히 6 28 496 8128 을 주면서 완전수 4개를 나열해주더라구요.
혹시 for 문에 for 문을 쓰는 방식으로 이 코딩을 완성할 수 있나요?
def perf(x):
factors=[]
for i in range(1,x) :
if x%i==0:
factors.append(i)
return sum(factors)==x
n=int(input("정수를 입력하세요: "))
for i in range(1,n+1):
if perf(i)==True:
print(i)
n=int(input('자연수 입력'))
def find_yaksu(x):
result=[]
for i in range(1,x+1):
if x % i == 0:
result.append(i)
return result
for i in range(1,n+1):
a=find_yaksu(i)
if sum(a)-a[-1] == i:
print(i)
약수 구하는 알고리즘을 알면 쉽게 풀 수 있는 문제네요.
Python입니다.
>>> def perfect(x):
... return sum(filter(lambda a: x % a == 0, [i for i in range(1, x)])) == x
...
>>> perfect(6)
True
>>> perfect(7)
False
>>> def f(n):
... for j in range(1, n + 1):
... if perfect(j):
... print(j)
...
>>> f(28)
6
28
def makeAns2(num2):
def makeAns(num):
ansList = [i for i in range(1, num + 1) if num % i == 0]
return True if num == sum(ansList) - num else False
ansList2 = [j for j in range(1, num2 + 1) if makeAns(j) is True]
print(ansList2)
makeAns2(10000)
[6, 28, 496, 8128] 출력
def CheckPerfNo(str_no):
inp_no = int(str_no)
division_list = []
for i in range(1,inp_no):
if inp_no%i == 0:
division_list.append(i)
else:
pass
if sum(division_list) == inp_no:
return True
else:
return False
inp_no = input("Type your input no:")
for i in range(1,int(inp_no)+1):
if CheckPerfNo(i):
print(i,end=' ')
def complete_number(n):
"""N 이하의 모든 완전수를 출력하기"""
complete_num = []
for i in range(1, n+1):
measure = {int(x) for x in range(1,i) if i%x == 0}
if i == sum(measure):
complete_num.append(i)
print(n,f'이하의 완전수는', complete_num, '입니다.')
num = int(input('수를 입력하세요.: '))
complete_number(num)
초보 다운 초보의 답안입니다.
n = input('숫자를 입력하시오 =')
s = []
for i in range(1,int(n)+1):
b = [ j for j in range(1,i) if i % j == 0]
if sum(list(b))== i:
s.append(i)
print(s)
def PerfectNumber(n):
l = []
for i in range(1,n):
if n % i == 0:
l.append(i)
if sum(l) == n : print('Perfect Number!')
else : print('no!')
def perfect(n):
a=[]
b=[]
for i in range(2, n):
a=[]
for j in range(1, i):
if i%j==0:
a.append(j)
if i==sum(a):
b.append(i)
print(b)
n=int(input('n값을 입력하시오:'))
perfect(n)
num = int(input("자연수 입력 :"))
result = 0
answer = []
for x in range(1,num+1):
for y in range(1,x):
if x % y == 0:
result += y
if result == x:
answer.append(x)
result = 0
print(answer)
5
n=int(input('n이하 완전수 모두 구하기'))
a=[]
for number in range(1, n+1):
sum_number=0
for i in range(1, number):
if number%i == 0:
sum_number+=i
elif number%i != 0:
pass
if sum_number==number:
a.append(number)
n=int(input('자연수 입력'))
perfectNum=[]
for i in range(1,n+1):
total=0
for j in range(1,i):
if i%j==0:
total+=j
if total==i:
perfectNum.append(i)
print('완전수 : {}'.format(perfectNum))
def divisor_num(num):#자기 자신을 제외한 양의 약수의 합 구하기
i = 1
sum = 0
while i < num:
if num % i == 0:
sum += i
i += 1
return sum
def find_perfect_num(num):#완전수 찾기
guess = divisor_num(num)
if guess == num:
return guess
else:
return None
def perfect_num_list():#완전수 리스트 만들기
n = int(input("자연수 N을 입력하세요 : "))
i = 1
result = []
for i in range(1, n + 1):
if find_perfect_num(i) != None:
result.append(find_perfect_num(i))
return result
print(perfect_num_list())
#codingdojing_completeNum_re
#자기자신을 제외한 모든 양의 약수들의 합이 자기자신이 되는 자연수.
N = eval(input('number: '))
resultList = []
for num in range(2, N+1):
divisorSum = 0
for i in range(1, num): #약수찾기
if num%i == 0:
divisorSum += i
if divisorSum == num: #완전수면
resultList.append(num)
print(resultList)
#input : 10000
#output: [6, 28, 496, 8128]
resultList2 = []
for num in range(2, N+1):
if sum(x for x in range(1,num) if num%x == 0) ==num:
resultList2.append(num)
print(resultList2)
파이썬 3.810 으로 작성되었습니다..
# 완전수를 구하는 문제, python 3.8.10
N = input()
def complete_number(n):
n = int(n)
result = 0
result_list = []
for i in range(1, n + 1):
for j in range(1, i):
if i % j == 0:
result += j
if result == i:
result_list.append(i)
result = 0
return result_list
print(complete_number(N))
result=[]
N=input()
for i in range(1,N+1):
sum = 0
for j in range(1,i):
if i%j==0:
sum+=j
if i==sum:
result.append(i)
print(result)
def perfect(N):
list_perfect = []
for i in range(1,N+1):
small_i = []
for s in range(1, i):
if i % s == 0:
small_i.append(s)
if sum(small_i) == i:
list_perfect.append(i)
print(list_perfect)
perfect(1000)
a = int(input('숫자: '))
def number(c):
e = []
# c보다 작은 모든 수에 대해서
for i in range(1, c+1):
b = 0
# i보다 작은 모든 수에 대해서
for y in range(1,i):
if i % y == 0: # y가 i의 약수라면,
b += y
if i == b: # 완전수라면
e.append(i)
return e
print(number(a))
n=int(input("자연수를 입력하세요:"))
perfect_number=[]
for i in range(1,n+1):
sum=0
for j in range(1,i):
if i%j==0:
sum+=j
if sum==i:
perfect_number.append(i)
print(perfect_number)
num = int(input(""))
while True :
dlist = [x for x in range(1,num) if num % x == 0]
if sum(dlist) == num :
print("%d"%(num))
if num == 1:
break
num -= 1
def abc(a):
A=0
for i in range(1, a):
if a%i==0:
A+=i
if A==a:
return a
def perfect(N):
B=[]
for i in range(1, N+1):
if abc(i):
B.append(i)
print(B)
user_input=int(input('자연수 : '))
result=[]
for num in range(2,user_input+1):
sum=0
for i in range(1,num):
if num % i ==0:
sum+=i
if sum==num:
result.append(num)
print(result)
# N이하의 완전수 구하는 문제 코딩
# 사용한 핵심 전략 : for 반복문, if 조건문
# 1. 변수 설정
natural_number=1000
perfect_number=[]
# 2. for문과 if문을 활용한 완전수 구하는 코드
for i in range(natural_number):
divisor=[]
for j in range(i):
if (i+1)%(j+1)==0:
divisor.append(j+1)
a=0
for k in range(len(divisor)):
a+=divisor[k]
if a==(i+1):
perfect_number.append(i+1)
print(f"완전수 {i+1}의 약수 : {divisor}")
# 3. 출력
print(f"** {natural_number}이하의 완전수 : {perfect_number} **")
N = int(input('자연수를 입력하세요: '))
for i in range(1, N+1):
# print(i)
total = 0
for j in range(1, i):
if i%j == 0:
total += j
if i == total:
print(total, end=' ')
static void num(int x) {
int sum;
for (int i = 2; i < x; i++) {
sum = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0) {
sum += j;
}
}
if (i == sum) {
System.out.print("완전수 " + i + "의 약수는 ");
for (int j = 1; j < i; j++) {
if (i % j == 0) {
System.out.print(j + " ");
}
}
System.out.println();
}
}
}
public static void main(String[] args) {
num(1000);
}
r_number = int(input('해당 숫자 안의 자연수를 구합니다 : '))
small_number = []
for range_number in range(1,r_number+1):
for i in range(1,range_number):
if range_number % i == 0:
small_number.append(i)
if sum(small_number) == range_number:
print(range_number)
small_number = []
#자연수 a의 약수 구하기
def dev (a) :
devs = []
for i in range(1,a) :
if a%i == 0 :
devs.append(i)
return devs
# dev 함수를 이용해서 완전수 여부 판단 식
def comp (a) :
devs = []
for i in range(1,a) :
if a%i == 0 :
devs.append(i)
if a == sum(devs) :
return True
else :
return False
# n 이하의 자연수중 완전수 여부 판단 식
def solution (n) :
arr = []
for i in range(1, n+1) :
if comp(i) == True :
arr.append(i)
return print(arr)
solution(int(input()))
N = int(input("자연수 N : ")) # 자연수 N을 입력한다.
for i in range(1, N+1): # 1~N까지의 숫자를 확인한다.
Sum = 0 # i와 비교하기 위한 변수 Sum을 초기화한다.
for j in range(1, i): # 1~자기자신을 제외한 숫자를 확인한다.
if i % j == 0: # 자기자신과 나누었을때 몫이 0이면 약수이다.
Sum += j # 약수인 경우 더해준다.
if Sum == i: # 더해준 값이 자기자신과 같은지 확인한다.
print('i : ' + str(i)) # 같은 경우 완전수이므로 출력한다.
def judge_perfect_number(n):
li = []
for i in range(1,n):
if n % i == 0:
li.append(i)
if sum(li) == n:
return True
else:
return False
def PN_add(n):
if judge_perfect_number(n) == True :
PN_list.append(n)
PN_list = []
n=int(input('input the number'))
for i in range(1,n):
PN_add(i)
print(PN_list)
// Rust
use std::collections::HashSet;
fn main() {
let limit: u32 = 10000;
for i in 2..=limit {
if divisors(i).into_iter().sum::<u32>() == i * 2 {
println!("{} is complete numer", i);
}
}
}
fn divisors(n: u32) -> HashSet
let mut set: HashSet<u32> = [1, n].into_iter().collect();
for i in 2..n {
if n % i == 0 {
if !set.insert(i) || !set.insert(n / i) {
return set
}
}
}
set
}
def factor(a):
f=[]
for i in range(1,a//2+1):
if (a/i)%1==0:
f.append(i)
return sum(f)
def perfect(b):
if factor(b)==b:
return b
else:
return 0
sum_per=0
n= input('자연수를 입력하시오 :')
print('입력한 자연수보다 작은 모든 완전수의 합은')
for i in range(1,int(n)+1):
sum_per+=perfect(i)
print(sum_per)
n = int(input("자연수를 입력하세요:"))
result = 0
for i in range(1,n+1):
for j in range(1,i):
if i%j==0:
result+=j
if result == i:
print(result)
result=0
def find_complete_num(num):
for i in range(2, num + 1):
divisor = [k*(i%k == 0) for k in range(1, round(i/2 + 1))]
if sum(divisor) == i: print(i, end = '\t')
num = input("숫자를 입력하세요 : ")
find_complete_num(int(num))
범위 줄이는것만 참고했습니다.
final_list = []
input_val = int(input("정수입력:"))
for i in range(1,input_val+1):
result_list = []
total = 0
#약수 구하기
for j in range(1, int(i**1/2)+1):
if(i%j == 0):
result_list.append(j)
#약수들의 합
for j in result_list:
total += j
if total == i:
print(str(total)+" 약수:"+str(result_list))
final_list.append(i)
print("완전수"+ str(final_list))
def getDivisor(n):
divisorList = []
for i in range(1,n):
if n % i ==0:
divisorList.append(i)
return divisorList
num = int(input(':'))
print([x for x in range(1, num + 1) if sum(getDivisor(x)) == x])
package com.algorithm.algorithmpractice.dojang;
import java.util.*;
public class PerfectNumber {
public static void main(String[] args) {
int input = 1000000;
List<Integer> perfect = new ArrayList<Integer>();
for (int i = 1; i < input + 1; i++) {
Set<Integer> inputSet = new HashSet<>();
for (int j = 1; j <= Math.sqrt(i); j++) {
if(i % j == 0){
inputSet.add(j);
inputSet.add(i/j);
}
}
int[] totalArr = new int[1];
inputSet.forEach(elem->{
totalArr[0] += elem;
});
if(i == totalArr[0]/2){
System.out.println(i);
}
}
}
}
n=int(input("#"))
def wan(n):
li=[]
for i in range(n):
sum=0
for j in range(1,i):
if i%j==0:
sum+=j
if sum==i:
li.append(i)
return(li)
print(wan(n))
def perfect_num(N):
perfect_number_list = []
for i in range(2,N+1):
sum = 0
for k in range(1,i):
if i%k == 0:
sum += k
if sum == i:
perfect_number_list.append(str(i))
print(N,"이하의 모든 완전수는",','.join(perfect_number_list),"이다.")
자바로 풀어 봤습니다.
import java.util.Scanner;
import java.util.ArrayList;
public class TestMain {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
ArrayList<Integer> storage = new ArrayList<>();
ArrayList<Integer> perfectNumbers = new ArrayList<>();
int N, sum=0;
// 입력
while(true) {
System.out.println("자연수 N을 입력하시오:");
N = scan.nextInt();
if(N<1) {
System.out.println("잘못 입력하셨습니다.\n");
}else {
break;
}
}
// 완전수 찾기
for(int i=1; i<=N; i++) {
// i의 약수(본인 제외) 찾기
for(int j=1; j<i;j++) {
if(i%j==0) {
storage.add(j);
}
}
// i의 약수들의 총합
for(int k=0; k<storage.size(); k++) {
sum += storage.get(k);
}
// 완전수 판별
if(sum == i) {
perfectNumbers.add(i);
}
sum=0;
storage.clear();
}
System.out.println(String.format("\n1 ~ %d까지 완전수는 다음과 같다.\n\n", N)+perfectNumbers);
}
}
N=int(input())
c=[]
for i in range(1,N+1):
b=[]
for j in range(1,i):
if i%j==0:
b.append(j)
if sum(b)==i:
c.append(i)
print(c)
sum = 0
n= 1000
for i in range(1,n+1):
for j in range(1,i):
if i %j ==0:
sum +=j
if sum == i:
print('완전수 {:4d}'.format(i))
sum =0
def Perfect_number(x):
number_list = []
for i in range(1, x):
if x % i == 0:
number_list.append(i)
return number_list
commend = int(input("x의 값을 입력하시오 : "))
select_number = Perfect_number(commend)
select_number_sum = sum(select_number)
if select_number_sum == commend:
print(f"{commend}는 완전 수 입니다.")
else:
print(f"{commend}는 완전 수가 아닙니다.")
한줄로 만드시는분들 보면 신기하네요
def Perfect_num(a):
result = 0
list = []
for n in range(4, a):
for i in range(2, a+1):
if n % i == 0:
result += n // i
if result == n:
list.append(result)
result = 0
return list
print(Perfect_num(29))
오류코드까지 만들어 봤습니다.
def d(k):
num = 0
for ii in range(1, k):
if k % ii == 0:
num += ii
return num
n = 0
input_n = 0
gold_n = ['없음']
for iii in range(4):
if iii == 3:
print('고만해라')
exit(0)
input_n = int(input('자연수 N을 입력하시오 : '))
if input_n == 0:
print('0을 입력하셨습니다.')
continue
elif input_n < 0:
print('음수를 입력하셨습니다.')
continue
break
for i in range(1, input_n + 1):
if i == d(i):
if n == 0:
gold_n.remove('없음')
n = 1
gold_n.append(i)
print('{}이하의 완전수는 {}'.format(input_n, gold_n))
def perfect(n):
b = []
for j in range(1, n+1):
a = []
for i in range(1, j):
if j%i == 0:
a.append(i)
if sum(a) == j:
b.append(j)
print(b)
#perfect(500)
#[6, 28, 496]
from math import sqrt
def isperfect (n):
if n == 1:
return False
sum = 0
for i in range(1, int(sqrt(n))+1):
if n % (i) == 0:
sum += i + n/i
sum -= n
if n == sum:
return True
else:
return False
while True:
Num = input("자연수 N을 입력하세요 : ")
if Num.isdecimal() == True and int(Num) > 0:
break
else:
print("자연수 N을 다시 입력하세요.")
Num=int(Num)
for i in range(1, Num+1):
if isperfect(i) == True:
print(i, end=" ")
python
num = int(input("자연수를 입력하시오: "))
perfect = []
temp = []
for x in range(2,num+1):
for i in range(1,x): #약수 구하기
if x%i == 0:
temp.append(i)
if sum(temp) == x: #완전수인지 판별
perfect.append(x)
temp = []
print(perfect)
private static ArrayList<Integer> completeNum(int num) {
ArrayList<Integer> compleNum = new ArrayList<>(); //최종완전수
for(int i=1; i<=num; i++) {
ArrayList<Integer> numAL = new ArrayList<Integer>(); //약수들
int sum=0;
for(int j=1; j<i; j++) {
if(i%j == 0) {
numAL.add(j);
}
}
for(int k : numAL) {
sum += k;
}
if(sum == i) {
compleNum.add(i);
}
}
return compleNum;
}
n = int(input())
for i in range(1, n + 1):
if i == sum([n for n in range(1, i) if i % n == 0]):
print(i, end=' ')
Python. 알고 있는 함수 기능이 매우 적어서..코드가 길어질 수밖에 없는 듯합니다. 많이 공부해야겠어요.
#perfectNumber
def perfect_numbers():
aliquot=[]
n=int(input("임의의 수를 입력하세요. : "))
for i in range(1,n): #입력받은 수 이하의 모든 수에 대한 완전수 여부 판별
temp=[] #완전수 여부를 판별하기 위해 약수를 임시로 모아 두는 리스트(아래 완전수 판별 함수 실시마다 비워줄 것)
for j in range(1,i):
if i%j==0:
temp.append(j) #약수를 모아 리스트 temp에 추가
else:
pass
if sum(temp)==i:
aliquot.append(i) #약수의 합이 제시된 수와 동일한지(즉, 완전수인지) 판별 후 완전수는 결과 리스트에 추가
print(aliquot)
perfect_numbers()
n = input("입력: ")
완전수 = []
for 자연수 in range(1, int(n)):
약수 = []
for i in range(1, 자연수+1):
if 자연수 % i == 0:
약수.append(i)
if sum(약수)-자연수 == 자연수:
완전수.append(자연수)
print(완전수)
package level1;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.stream.IntStream;
public class PerfectNumber_539 {
// 자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다.
// 예를 들면, 6과 28은 완전수이다.
// 6=1+2+3 // 1,2,3은 각각 6의 약수
// 28=1+2+4+7+14 // 1,2,4,7,14는 각각 28의 약수
// 입력으로 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.
public static int getFactorSum(int num) {
int result = 0;
if(num == 0 || num == 1) {return 0;}
for (int i = 0; i < num; i++) {
if (i == 0) {continue;}
if (num % i == 0) {result += i;}
}
// HashSet<Integer> set = new HashSet<Integer>();
// for (int i = 2; i < num; i++) {
// if(num % i == 0 && set.add(i)) {
// result += i;
// }
// }
return num == result ? result : 0;
}
public ArrayList<Integer> isPerfectNums(int num){
ArrayList<Integer> result = new ArrayList<Integer>();
IntStream.range(0, num).map(PerfectNumber_539::getFactorSum).forEach(result::add);
// IntStream.range(0, num).map(v -> v == getFactorSum(v) ? v : 0).filter(v -> v !=0).forEach(result::add);
return result;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int inputNum = sc.nextInt();
PerfectNumber_539 isP = new PerfectNumber_539();
isP.isPerfectNums(inputNum).stream().filter(v -> v != 0 && v != 1).forEach(System.out::println);
}
}
// num= int(input("숫자를 입력하시오 : "))
// print([x for x in range(1, num+1) if x==sum(y for y in range(1, x) if x%y==0)])
추천 많이 받은 파이썬 풀이를 보고 같은 방식으로 구현해봤습니다
Scanner sc = new Scanner(System.in);
int inputNum = sc.nextInt();
IntStream.range(1, inputNum+1).filter(v -> v == IntStream.range(1, v).filter(v2 -> v%v2==0).sum()).forEach(System.out::println);
import math
result = []
sum = 0
num = int(input("숫자를 넣으시지: "))
num2 = math.floor(num/2)
for i in range(1,num2+1):
if num % i == 0:
result.append(i)
for jakja in result:
sum += jakja
if sum == num:
print("완~전수~")
else:
print("불완~전수~")
n=int(input("r:"))
alp=0
ddd=[]
for i in range(1,n):
alp=0
for p in range(1,i):
if i%p==0:
alp=alp+p
if alp==i:
print(i)
intInput=int(input())
def perfactNum(iInput):
for i in range(1,iInput+1):
intSum=0#완전수 판별 초기화
for j in range(1,i):
if i%j==0:#약수 판별
intSum+=j#완전수 판별기에 추가
if intSum==i:#완전수 판별
print(i,"은(는) 완전수")
perfactNum(intInput)
JAVA
package chapter03; import java.util.Scanner;
public class PerfectNumber { public static void main(String[] args) { Scanner scn = new Scanner(System.in); System.out.println("자연수 N 입력"); int n = scn.nextInt(); int sum=0;
for (int i = 6; i <= n; i++) {
for (int j = 1; j < i; j++) {
if (i%j==0) {
sum+=j;
}
}
if (sum==i) {
System.out.print(sum+" ");
}
sum =0;
}
}
}
n = int(input('완전수를 구하고자 하는 임의의 자연수 입력'))
def s_divisor(N): # s_divisor : 약수 중 자신은 제외
div =[]
for i in range(1, N):
if N % i == 0:
div.append(i)
return div
comp_num = []
for i in range(1, n+1):
if sum(s_divisor(i)) == i:
comp_num.append(i)
print(comp_num)
num = int(input("Enter Num:"))
pf = []
if num <= 2:
print("Too Small !!!");quit()
for i in range(3,num+1):
div = []
for j in range(1,i):
if i % j == 0:
div.append(j)
else:continue
if sum(div) == i:
pf.append(i)
else:continue
print(pf)
N= int(input('자연수를 입력하세요'))
def get_yaksu(num):
yaksus = []
for n in range(1, int(num/2)+1):
if num % n == 0:
yaksus.append(n)
return yaksus
result = []
for n in range(1, N+1):
if sum(get_yaksu(n)) == n:
result.append(n)
print(result)
a = int(input("원하는 자연수를 입력해주세요 :")) def yacsu(n): totalyacsu = [] for i in range(1,n): if n%i == 0: totalyacsu.append(i) return totalyacsu
what_we_want=[] for i in range(1,a+1): sum=0 for j in yacsu(i): sum += j if sum == i: what_we_want.append(i)
print(what_we_want)
def sumOfDiv(N):
sd = 0
for n in range(1, N):
if N % n == 0:
sd += n
return sd
num = int(input("숫자를 입력하시오 : "))
res = []
for N in range(1, num):
if N == sumOfDiv(N):
res.append(N)
print(res)
n = int(input())
perfectnum = []
for i in range(1, n+1):
aliquot = []
for k in range(1, i):
if i % k == 0:
aliquot.append(k)
if sum(aliquot) == i:
perfectnum.append(i)
print(perfectnum)
num = int(input("자연수 N을 입력하세요. : "))
perfect=[]
for i in range(1,num+1):
sum = 0
for j in range(1,i):
if i % j == 0:
sum = sum + j
if sum == i:
perfect.append(i)
print(perfect)
N = int(input())
nums = []
for i in range(1,N+1):
sums=0
for m in range(1,i+1):
if i%m == 0:
sums +=m
if i == sums:
nums.append(i)
print(nums)
def perfect():
results = []
N = int(input("Enter the number : "))
for i in range(2,N+1):
divisors = []
for j in range(1,i):
if i % j == 0 :
divisors.append(j)
if sum(divisors) == i :
results.append(i)
return results
def perfNum(x):
sumNum = 0
for i in range(1, x+1):
if x % i == 0:
sumNum += i
if sumNum == x:
return True
else:
return False
n = int(input("숫자를 입력하세요: "))
divi = []
for i in range(1, n+1):
if perfNum(i) == True:
divi.append(i)
print(divi)