미새문지

24.06.30 day14 코드트리 문제 풀기 본문

개발 TIL

24.06.30 day14 코드트리 문제 풀기

문미새 2024. 6. 30. 23:27
728x90

완전수

어떤 수 의 진약수란, 을 나누어 떨어지게 하는 양의 정수 중에서 이 아닌 수를 말합니다. 이때, 의 진약수의 총합이 과 같다면, 을 완전수라고 말합니다.

예를 들어, 28의 진약수로는 1, 2, 4, 7, 14가 있고, 이들의 합은 28이므로, 28은 완전수입니다. 그러나, 20의 진약수로는 1, 2, 4, 5, 10이 있고, 이들의 합은 22이므로, 20은 완전수가 아닙니다.
두 정수 start와 end가 주어집니다. start 이상 end 이하인 완전수의 개수를 세는 프로그램을 작성해보세요.

예제1
입력: 3 30
출력: 2
a, b = map(int, input().split())
cnt = 0

for i in range(a, b+1):
    sum = 0
    for j in range(1, i):
        if i % j == 0:
            sum += j
    if sum == i:
        cnt += 1

print(cnt)

a 부터 b까지 완전수의 개수를 찾는 문제다. 하나씩 1부터 반복문으로 시작하여 a전까지 나누어 떨어지면 값을 더해서 a값이 나올 때 cnt를 올린 후 모든 반복문이 끝나면 cnt를 출력한다.


소수 구하기

1이상 n이하의 소수를 오름차순으로 출력하는 프로그램을 작성해보세요.

예제1
입력: 3
출력: 2 3
n = int(input())

for i in range(2, n+1):
    prime = True

    for j in range(2, i):
        if i % j == 0:
            prime = False
            break
    
    if prime:
        print(i, end=' ')

소수는 1과 자기 자신으로밖에 안나눠지기 때문에, 기본 bool값을 true로 주고 2부터 i까지 반복문을 돌면서 한번이라도 나누어 떨어지면 bool값을 false로 바꾼다. false라는 뜻은 소수가 아니기 때문에 이 후 bool값이 true일 때만 출력해준다.

728x90