File #1
수의 특별한 의미를 부여하는 것을 수비주의라고 한다.
당신은 어떤 사건을 수사하기 위해 수비주의 클럽에 들어가야한다.
다만 이 클럽에 들어가기 위해서는 어떤 수를 입력받고 그 수가 어떤 수인지 알려주는 프로그램을 작성해야 한다.
문제) 양의 정수 n을 입력받고 그 수가 과잉수인지 완전수인지 부족수인지 출력하시오.
예)
6
20
15
답)
완전수입니다
과잉수입니다
부족수입니다
File #2
우여곡절 끝에 당신은 수비주의 클럽에 들어가게 되었다.
그러다 범인을 잡을 수 있는 파일을 알게되고,
그 파일에 위치가 회장에 컴퓨터에 있다는 것도 알게 되었다.
그 정보가 확실한지는 모르겠지만 달리 방법이 없는 터라 그 컴퓨터에 접속해야한다.
하지만 그 컴퓨터에는 암호가 있었고, 정해진 시간이 있는지라 그 암호를 프로그램을 이용해 입력해야한다.
문제) 어떤 수를 입력받고 진약수들의 합과 그 수가 친화수인지 혼약수인지 일반 수인지 출력하시오.
그러나 그 수가 혼약수이면 (친화수들의 합 -1)을 출력해야 한다.
예)
220
75
20
출력)
284, 친화수입니다.
48, 혼약수입니다.
22, 일반 수입니다.
진약수 : 어떤 수의 자기자신을 제외한 약수 (예 - 20의 진약수는 1,2,4,5,10)
완전수 : 진약수들의 합이 자기 자신인 수
과잉수 : 진약수들의 합이 자기 자신보다 큰 수
부족수 : 진약수들의 합이 자기 자신보다 작은 수
친화수 : 두 수의 쌍이 있어, 어느 한 수의 진약수를 모두 더하면 다른 수가 되는 수
혼약수 : 두 수의 쌍이 있어,( 어느 한 수의 진약수 - 1)를 모두 더하면 다른 수가 되는 수
26개의 풀이가 있습니다.
단순무식한 방법입니다.
public class 수비주의 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int count = 0;
for(int i =1; i<num; i++) {
if(num%i==0) {
count+=i;
}
}
if(count==num) {
System.out.println("완전수입니다");
}
else if(count>num) {
System.out.println("과잉수입니다");
}
else {
System.out.println("부족수입니다");
}
//여기까지 File #1
int num1 = scan.nextInt();
int count2 = 0;
for(int i=1; i<num1; i++) {
if(num1%i==0) {
count2+=i;
}
}
int count3 = 0;
for(int j=1; j<count2; j++) {
if(count2%j==0) {
count3+=j;
}
}
if(count3==num1) {
System.out.println(count2+", 친화수입니다");
System.exit(0);
}
int count4 = 0;
for(int i=1; i<num1; i++) {
if(num1%i==0) {
count4+=i;
}
}
int count5 = count4-1;
int count6 = 0;
for(int j=1; j<count5; j++) {
if(count5%j==0) {
count6+=j;
}
}
if((count6-1)==num1) {
System.out.println(count5+", 혼약수입니다");
}
else {
System.out.println(count2+", 일반수입니다");
}
}
}
파이썬 3.6.5
n = int(input('임의의 자연수를 입력하세요 : '))
x = n - sum(i for i in range(1, n) if not n % i)
if x < 0: print('과잉수입니다.')
else: print(('부족수입니다.', '완전수입니다.')[not x])
def Jin(x):
result=0
for i in range(x):
if i ==0:
continue
if x%i==0:
result+=i
return(result)
num = int(input("숫자를 입력하세요."))
jin = Jin(num)
if num == jin:
print("완전수 입니다.",)
elif num > jin:
print("부족수 입니다.")
else:
print("과잉수 입니다.")
#include <stdio.h>
int sumDivisorof(int num);
int main(int argc, char *argv[])
{
int input;
scanf("%d", &input);
if (sumDivisorof(input) == input)
printf("완전수입니다\n");
else if (sumDivisorof(input) > input)
printf("과잉수입니다\n");
else
printf("부족수입니다\n");
return 0;
}
int sumDivisorof(int num)
{
int i;
int sum = 1;
for (i=2; i<num ; i++ )
{
if (num%i == 0)
{
sum += i;
}
}
return sum;
}
#File 1
def check_num(n):
common = []
sum = 0
for i in range(1,n):
if n%i == 0:
common.append(i)
for j in common:
sum += j
if sum < n:
print("부족수입니다.")
elif sum == n:
print("완전수입니다.")
elif sum > n:
print("과잉수입니다.")
num = int(input())
check_num(num)
#File 2
def jin_common(n):
common = []
sum_n = 0
sum = 0
for i in range(1,n):
if n%i == 0:
common.append(i)
for j in common:
sum_n += j
common = []
for k in range(1, sum_n):
if sum_n%k == 0:
common.append(k)
for m in common:
sum += m
common = []
sum_p = 0
for p in range(1, sum_n-1):
if (sum_n-1) % p ==0:
common.append(p)
for o in common:
sum_p += o
if sum == n:
print("%d, 친화수입니다."%(sum_n))
elif (sum_p-1) == n:
print("%d, 혼약수입니다."%(sum_n-1))
else:
print("%d, 일반수입니다."%(sum_n))
jin_common(int(input()))
int main()
{
int input = 0;
int sum = 0;
cin >> input;
for (int i = 1; i < input; ++i)
{
if (input % i == 0)
{
sum += i;
}
}
if (sum > input)
cout << input << " : 과잉수 입니다" << endl;
else if (sum < input)
cout << input << " : 부족수 입니다" << endl;
else
cout << input << " : 완전수 입니다" << endl;
system("pause > null");
return 0;
}
int RealDividorSum(int max)
{
int sum = 0;
for (int i = 1; i < max; ++i)
{
if (max % i != 0)
continue;
hap += i;
}
return sum;
}
int main()
{
int input = 0;
cin >> input;
int num = RealDividorSum(input);
if (RealDividorSum(num) == input)
cout << input << "은 " << num << "과 " << "친화수" << endl;
else
{
int betrothed = RealDividorSum(num - 1) - 1;
if (betrothed == input)
cout << input << "은 " << num - 1 << "와 " << "혼약수" << endl;
else
cout << input << "은 " << "일반수" << endl;
}
system("pause > null");
return 0;
}
Python
test1 = [6, 20, 15, 220, 75, 20]
#test1 = [75]
for t in test1:
#진약수의 합
jin = 0
for i in range(1, t):
if t % i == 0:
jin += i
if jin > t: print("{}는 과잉수입니다.".format(t))
elif jin < t: print("{}는 부족수입니다.".format(t))
else: print("{}는 완전수입니다.".format(t))
pair = 0
for i in range(1, jin):
if jin%i == 0:
pair += i
if pair == t: print("{}, {}는 친화수입니다.".format(jin, t))
else:
pair = 0
for i in range(1, jin-1):
if (jin-1)%i == 0:
pair += i
if pair-1 == t: print("{}, {}는 혼약수입니다.".format(jin-1, t))
else: print("{}, {}는 일반수입니다.".format(jin, t))
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[])
{
int i;
int n = atoi(argv[1]);
int sum = 0;
sum += 1;
for( i = 2; i<=n/2; i++ )
{
if( n % i == 0 )
{
sum += i;
}
}
if( sum == n )
{
printf("perfect number\n");
}
else if( sum > n )
{
printf("abundant number\n");
}
else
{
printf("defective number\n");
}
}
File #1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int num = new Scanner(System.in).nextInt(), sum = 0;
for (int i = 1; i < num / 2 + 1; i++)
if (num % i == 0)
sum += i;
System.out.println((num == sum ? "완전" : num > sum ? "부족" : "과잉") + "수입니다");
}
}
File #2
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
int num = new Scanner(System.in).nextInt();
System.out.print((Check(Check(num, 0), 0) == num ? Check(num, 0) + ", 친화"
: Check(Check(num, 1), 1) == num ? Check(num, 1) + ", 혼약"
: Check(num, 0) + ", 일반") + "수입니다");
}
private static int Check(int num, int a) {
int sum = 0;
for (int i = 1; i < num / 2 + 1; i++)
if (num % i == 0)
sum += i;
return sum - a;
}
}
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()
for x in range(1, int(self.num ** 0.5)+1):
if not(self.num%x):
result |= {x, int(self.num/x)}
return result
def isperfect(self):
sd = sum(sorted(self.divisor())[:-1])
return '완전수' if sd == self.num else '과잉수' if sd > self.num else '부족수'
def isnomal(self):
sd = sum(sorted(self.divisor())[:-1])
return (sd,'완전수') if sd == self.num else (sd-1,'혼약수') if sum(sorted(calc_divisor(sd-1).divisor())[1:-1]) == self.num else (sd,'친화수') if sum(sorted(calc_divisor(sd).divisor())[:-1]) == self.num else (sd,'일반수')
if __name__ == "__main__":
while 1:
n = input('입력(종료는 엔터): ')
if not n: break
c = calc_divisor(int(n))
print('{}은 {}입니다.'.format(n, c.isperfect()))
print('{}은 {}입니다.'.format(n, c.isnomal()))
입력(종료는 엔터): 6
6은 완전수입니다.
6은 (6, '완전수')입니다.
입력(종료는 엔터): 20
20은 과잉수입니다.
20은 (22, '일반수')입니다.
입력(종료는 엔터): 15
15은 부족수입니다.
15은 (9, '일반수')입니다.
입력(종료는 엔터): 220
220은 과잉수입니다.
220은 (284, '친화수')입니다.
입력(종료는 엔터): 75
75은 부족수입니다.
75은 (48, '혼약수')입니다.
입력(종료는 엔터): 20
20은 과잉수입니다.
20은 (22, '일반수')입니다.
입력(종료는 엔터):
JavaScript
function sumProperFactors(n) {
var sum = 0;
for (var i = 1; i < n; i++) {
if (n % i == 0)
sum += i;
}
return sum;
}
var input1 = [6, 20, 15];
for (var key in input1) {
var n = input1[key];
var s = sumProperFactors(n);
if (s == n) console.log("완전수입니다.");
else if (s > n) console.log("과잉수입니다.");
else console.log("부족수입니다.");
}
var input2 = [284, 75, 20];
for (var key in input2) {
var n = input2[key];
var s = sumProperFactors(n);
if (sumProperFactors(s) == n) console.log(s + ", 친화수입니다.");
else if (sumProperFactors(s - 1) - 1 == n) console.log((s - 1) + ", 혼약수입니다.");
else console.log(s + ", 일반수입니다.");
}
def mea(n):
mes = 0
for x in range(1,int(n/2)+1):
if n%x == 0:
mes += x
return mes
def Pern(n):
mes = mea(n)
return '완전수' if mes == n else '과잉수' if mes > n else '부족수'
def aff(n):
mes = mea(n)
return '친화수' if n == mea(mes) else '혼약수' if mes-1 == mea(mes-1)-1 else '일반수'
#진약수
def divisor(x):
result = []
for i in range(1, x):
if x % i == 0:
result.append(i)
return result
num1, num2 = map(int, input().split())
def find_1(num):
if sum(divisor(num)) == num:
return '완전수입니다'
elif sum(divisor(num)) > num:
return '과잉수입니다'
else:
return '부족수입니다'
def find_2(num):
another_num = sum(divisor(num))
if sum(divisor(another_num)) == num:
return another_num, '친화수입니다'
if sum(divisor(another_num - 1)) - 1 == num:
return another_num - 1, '혼약수입니다'
else:
return another_num, '일반수입니다'
print(find_1(num1))
print('{}, {}'.format(*find_2(num2)))
C#
using System;
using System.Collections.Generic;
using System.Linq;
namespace CD173
{
internal class Program
{
private static void Main()
{
Numerology testCase;
// --- File #1 ---
testCase = new Numerology(6);
testCase.PrintFile1Status();
testCase = new Numerology(20);
testCase.PrintFile1Status();
testCase = new Numerology(15);
testCase.PrintFile1Status();
// --- File #2 ---
testCase = new Numerology(220);
testCase.PrintFile2Status();
testCase = new Numerology(75);
testCase.PrintFile2Status();
testCase = new Numerology(20);
testCase.PrintFile2Status();
}
}
internal class Numerology
{
private readonly int TargetNumber;
public Numerology(int number)
{
TargetNumber = number;
}
public void PrintFile1Status() // File #1 상태 출력
{
int sum = SumProperDivisors(TargetNumber);
string status = TargetNumber == sum ? "완전수" :
TargetNumber > sum ? "부족수" : "과잉수";
Console.WriteLine($"{status}입니다.");
}
public void PrintFile2Status() // File #2 상태 출력
{
int sum = SumProperDivisors(TargetNumber);
string status = string.Empty;
if (IsAmicable(TargetNumber))
{
status = $"{sum}, 친화수";
}
else if (IsQuasiAmicable(TargetNumber))
{
status = $"{sum - 1}, 혼약수";
}
else
{
status = $"{sum}, 일반수";
}
Console.WriteLine($"{status}입니다.");
}
private static bool IsAmicable(int number) // 친화수 판단
{
var tmpVal = SumProperDivisors(number);
return number == SumProperDivisors(tmpVal);
}
private static bool IsQuasiAmicable(int number) // 혼약수 판단
{
var tmpVal = SumProperDivisors(number) - 1;
return number == SumProperDivisors(tmpVal) - 1;
}
private static int SumProperDivisors(int number) // 진약수 합
{
var properDivisors = new HashSet<int>() { 1 };
for (int i = 2; i * i <= number; i++)
{
if (number % i == 0)
{
properDivisors.Add(i);
properDivisors.Add(number / i);
}
}
return properDivisors.Sum();
}
}
}
N = int(input())
check = False
def File(N):
Nint = 0
for i in range(1,N):
if N % i == 0:
Nint += i
if N == Nint:
print("완전수입니다")
if N < Nint:
print("과잉수입니다")
if N > Nint:
print("부족수입니다")
def File2(N):
other1 = 0
other2 = 0
check = 0
check1 = 0
finishcheck = 0
for i in range(1,N):
if N % i == 0:
other1 += i
other2 = other1 - 1
for i in range(1,other1):
if other1 % i == 0:
check += i
if 1 < i and i <= other2-1:
if other2 % i == 0:
check1 += i
if check == N:
print(other1,"친화수입니다.")
finishcheck = 1
if check1 == N:
print(other2,"혼약수입니다.")
finishcheck = 1
if finishcheck == 0:
print(other1,"일반 수입니다")
File(N)
File2(N)
def fun(n): # 진약수 구하는 함수
result = []
for i in range(1,n):
if n % i == 0:
result.append(i)
return result
value = int(input("숫자를 입력 : "))
print("File_1")
if value == sum(fun(value)):
print("완전수 입니다.")
elif value < sum(fun(value)):
print("과잉수 입니다.")
elif value > sum(fun(value)):
print("부족수 입니다.")
print("File_2")
if value == sum(fun(sum(fun(value)))):
print("친화수 입니다.")
elif value == sum(fun(sum(fun(value))-1))-1:
print("혼약수 입니다.")
else :
print("일반수 입니다.")
def jinyaksuhap(x):
sum=0
for i in range(1,x):
if x%i==0:
sum+=i
return sum
a=int(input('n='))
b=jinyaksuhap(a)
print ('1.')
if b==a:
print ('완전수')
elif b>a:
print ('과잉수')
else:
print ('부족수')
print ('2.')
if a==jinyaksuhap(b):
print (b,'친화수')
elif a==(jinyaksuhap(b-1)-1):
print (b-1,'혼약수')
else:
print (b,'일반수')
def ss(num):
n = []
for i in range(1, int(num ** .5) + 1):
if num % i == 0:
n.append(i)
if num // i != i:
n.append(num // i)
del n[1]
return sum(n)
def file1(number):
in1 = ss(number)
if in1 == number: return in1, '완전수'
elif in1 > number: return in1, '과잉수'
else: return in1, '부족수'
def file2(number):
in1 = ss(number)
if number == ss(in1-1)-1: return in1-1, '혼약수'
elif number == ss(in1): return ss(number), '친화수'
else: return in1, '일반수'
if __name__ == '__main__':
number = 75
print(*file1(number))
print(*file2(number))
#file1
file1 = int(input())
yaksu1 = []
for i in range(1,file1):
if n%i == 0:
yaksu1.append(i)
else:
continue
if sum(yaksu1) == file1:
print('완전수')
elif sum(yaksu1) <= file1:
print('부족수')
else:
print('과잉수')
#file2
file2 = int(input())
file2yaksu = []
for k in range(1,file2):
if file2%k == 0:
file2yaksu.append(k)
else:
continue
comparesu = sum(file2yaksu)
comparesuyaksu = []
for j in range(1,comparesu):
if comparesu%j == 0:
comparesuyaksu.append(j)
else:
continue
if sum(comparesuyaksu) == file2 and sum(file2yaksu) == comparesu:
print('%d,친화수' %comparesu)
else:
comparesuminus = sum(file2yaksu)-1
comparesuminusyaksu = []
for j in range(1,comparesuminus):
if comparesuminus%j == 0:
comparesuminusyaksu.append(j)
else:
continue
print(comparesuminusyaksu)
if sum(comparesuminusyaksu)-1 == file2 and (sum(file2yaksu)-1) == comparesuminus:
print('%d 혼약수'%comparesuminus)
else:
print('%d 일반 수'%comparesu)
def divisor(n):
return [k for k in range(1,n) if n%k==0 ]
def numberSet1(n):
if n == sum(divisor(n)):
print("{}는 완전수입니다.".format(n))
elif n < sum(divisor(n)):
print("{}는 과잉수입니다.".format(n))
elif n > sum(divisor(n)):
print("{}는 부족수입니다.".format(n))
def numberSet2(n):
if n == sum(divisor(n)):
print("{}, 친화수입니다.".format(sum(divisor(n))))
elif n < sum(divisor(n)):
print("{}, 일반수입니다.".format(sum(divisor(n))))
elif n > sum(divisor(n)):
print("{}, 혼약수입니다.".format(sum(divisor(n))-1))
numberSet1(6)
numberSet1(20)
numberSet1(15)
numberSet2(220)
numberSet2(75)
numberSet2(20)
def yac(n) : return sum([i for i in range(1,n+1) if n%i==0])-n
def file1(n) :
if n==yac(n) : print('완전수')
elif n<yac(n): print('과잉수')
elif n>yac(n): print('부족수')
def file2(n) :
m = yac(n)
if n==yac(m) : print(f'{yac(n)} 친화수입니다')
elif n==yac(m-1)-1 : print(f'{yac(n)-1} 혼약수입니다')
else : print(f'{yac(n)} 일반수입니다')
file1(6)
file1(20)
file1(15)
file2(220)
file2(75)
file2(20)
def defensiveness(a):
c = 0
for i in range(1,a):
if a%i == 0:
c += i
return c
if __name__ == '__main__':
a = int(input())
s = defensiveness(a)
if s == a:
print('완전수')
elif s < a:
print('부족수')
else:
print('과잉수')
K = 0
for w in range(1,s):
if s%w == 0:
K += w
if K == a:
print('{0},친화수'.format(s))
else:
F = 0
m = s-1
for r in range(1,m):
if m%r == 0:
F += r
if m == a:
print('{0},혼약수'.format(m))
else:
print('{0},일반수'.format(s))
n = int(input("입력하시오"))
arr = [i for i in range(1,n) if n%i==0]
a = sum(arr)
if a == n:
print("완전수")
elif a>n:
print("과잉수")
else:
print("부족수")
File2의 문제는 설명이 애매모호합니다. '문제) 어떤 수를 입력받고 진약수들의 합과 그 수가 친화수인지 혼약수인지 일반 수인지 출력하시오.' 문제에서 어떤수 a와 그 a의 진약수의 총합(b)을 쌍으로 두고, 친화수 혼약수를 구하라는거 같은데
'친화수 : 두 수의 쌍이 있어, 어느 한 수의 진약수를 모두 더하면 다른 수가 되는 수'
위 친화수 조건에 따라 애초에 친화수가 되는 쌍으로 문제를 풀어야하네요 추가 부연설명이 필요해보입니다
// Rust
fn natural_numbers() {
let vec = [220, 75, 20];
for n in vec {
let mut sum = divisors(n).iter().sum::<u128>() + 1;
let mut result = String::new();
if divisors(sum).iter().sum::<u128>() + 1 == n {
result = "친화수".to_string();
} else if divisors(sum - 1).iter().sum::<u128>()==n {
result = "혼약수".to_string();
sum -= 1;}
else { result = "일반수".to_string();}
println!("{}: {} {}", n, sum, result);
}
}
use std::collections::HashSet;
fn divisors(n: u128) -> HashSet
let mut set = HashSet::<u128>::new();
for i in 2..n {
if n % i == 0 {
if !set.insert(i) || !set.insert(n/i) { break; } }}
set
}
혼약수 구하는 코드는 참조했습니다.
package org.javaturotials.ex;
import java.util.*;
import java.util.stream.Collectors;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int hsum=0;
int sum=0;
int dsum=0;
String result=null;
for(int i=1; i<num; i++) {
if(num%i==0) {
sum+=i;
}
}
int hc = sum-1;
for(int i=1; i<sum; i++) {
if(sum%i==0) {
dsum+=i;}
}
for(int i=1; i<hc; i++) {
if(hc%i==0) {
hsum+=i;
}
}
if(dsum==num) {
result="친화수";
}
if(hsum-1==num) {
result="혼약수";
sum=hc;
}
else {
result = "일반수";
}
System.out.println(result + " " + sum );
}
}
print('문제 1) 양의 정수 n을 입력받고 그 수가 과잉수인지 완전수인지 부족수인지 출력하시오.')
for n in [6, 20, 15]:
x = n - sum(i for i in range(1, n) if n % i == 0)
if x < 0:
print(n, '은 과잉수입니다.')
elif x > 0:
print(n,'은 부족수입니다.')
else:
print(n, '은 완전수입니다.')
print('\n문제 2) 양의 정수 n을 입력받고 그 수가 과잉수인지 완전수인지 부족수인지 출력하시오.')
for n in [220, 75, 20]:
nn = sum(i for i in range(1, n) if n % i == 0)
if sum(i for i in range(1, nn) if nn % i == 0) == n:
print(nn, '은 친화수입니다.')
elif n == sum(i for i in range(1, nn-1) if (nn-1) % i == 0) -1:
print(nn-1, '은 혼약수입니다. ')
else:
print(nn, '은 일반 수입니다.')