반응형
안녕하세요.
이승혁입니다.
오늘은 완전수인지 판별하는 알고리즘을 구현해 보겠습니다.
### 완전수 ?
자신을 제외한 약수들의 합과 자신이 같은 수입니다.
6의 약수는 1, 2, 3, 6 입니다.
자신인 6을 제외한 1 + 2 + 3 = 6
따라서 6은 완전수 입니다.
전에 약수를 구하는 코드는 구현을 했습니다!
그 코드를 사용해서 쉽게 완전수를 판별할 수 있습니다.
# 약수 구하는 코드
2020/12/28 - [알고리즘] - [Python & SQL] 약수 구하기
### Python 완전수 판별 코드
수 입력 받습니다.
약수를 리스트로 구합니다.(자기자신 제외)
약수의 합을 저장합니다.
입력받은 수와 약수의 합을 비교합니다.
# 완전수 알고리즘
num=int(input('완전수를 판별합니다. 숫자를 입력하세요 : '))
divisor=[i for i in range(1,num) if num%i==0]
result=sum(divisor)
if result==num:
print('%d : 완전수입니다.'%num)
else:
print('%d : 완전수가 아닙니다.'%num)
입력 받지 말고, 범위에서 완전수를 찾는 코드도 구현해 보았습니다.
for i in range(2,1000): # 2 ~ 99까지
divisor=[j for j in range(1,i) if i%j==0]
result=sum(divisor)
if result==i:
print('완전수:%d'%i)
print('약수 : %s\n'%divisor)
### SQL 완전수 판별 코드
accept num prompt '완전수를 판별합니다. 숫자를 입력하세요'
with divisor_table as ( select level as 약수
from dual
where mod(&&num,level)=0
connect by level<&&num)
select case when sum(약수)=&&num then listagg(약수,'+')||'='||sum(약수)||' 완전수입니다.'
else listagg(약수,'+')||'='||sum(약수)||' 완전수가 아닙니다.'
end "완전수 판별하기"
from divisor_table;
# 완전수 범위로 찾는 쿼리
accept num prompt '완전수를 판별합니다. 범위를 입력하세요'
with num_table as ( select level as 수
from dual
connect by level<=&&num
order by 수)
select '완전수 :'||n1.수||' <'|| listagg(n2.수,'+')||'>' 완전수찾기
from num_table n1, num_table n2
where mod(n1.수,n2.수)=0
group by n1.수
having n1.수=sum(n2.수)-n1.수
order by 1;
반응형
'알고리즘' 카테고리의 다른 글
[Python&SQL] 재귀 함수 팩토리얼 구구단 (0) | 2021.01.03 |
---|---|
[Python] 소인수 분해하기 (2) | 2021.01.02 |
[Python] 최소공배수(LCM) 구하기 (0) | 2021.01.02 |
[Python & SQL ] 최대 공약수 구하기 (0) | 2020.12.31 |
[Python & SQL] 정수 소수 판별기 (2) | 2020.12.30 |
[Python&SQL] 소수(Prime number) 구하기 (1) | 2020.12.29 |
[Python & SQL] 약수 구하기 (6) | 2020.12.28 |
[Python] 스택(stack) 구현하기 (0) | 2020.12.27 |