백준_단계별로 풀어보기_9단계_약수, 배수와 소수

■ 백준 5086 배수와 약수_브론즈3

import sys
for x in sys.stdin:
    a, b = map(int, x.split())
    if a == b == 0:
        break
    if b%a == 0:
        print("factor")
    elif a%b == 0:
        print("multiple")
    else:
        print("neither")

 

■ 백준 5086 약수 구하기_브론즈3

n, k = map(int, input().split())
arr = []
for i in range(1,n+1):
    if n%i == 0:
        arr.append(i)
print(0 if len(arr)-1 < k-1 else arr[k-1])

# # 고수코드: list에 0을 붙였다.
# # 사실 리스트 컴프리핸션 써서 한줄코딩 하셨는데 내 코드에 맞게 수정했다.
# print((arr+[0]*10000)[k-1])

 

■ 백준 9506 약수들의 합_브론즈1 (복습)

import sys
for x in sys.stdin:
    n = int(x)
    if n == -1: break
    arr = []
    for i in range(1,n+1):
        if n%i == 0 and n != i:
            arr.append(i)
    if sum(arr) != n:
        print(f"{n} is NOT perfect.")
    else:
        print(f"{n} = ", end="")
        for i in arr:
            print(f"{i}\n" if arr[-1] == i else f"{i} + ", end="")

# # 고수코드: 제곱근을 사용하여 약수 구하는 반복문을 획기적으로 줄임
# # (복습) 약수 구하는 반복문
# import sys
# while True:
#     n = int(sys.stdin.readline())
#     if n == -1: break
#     l = []
#     for i in range(2, int(n**(1/2)) + 1):
#         if n%i == 0:
#             l.extend((i, n//i))
#     l.append(1)
#     if sum(l) == n:
#         l.sort()
#         print(n,'=', end=' ')
#         print(*l, sep=' + ')
#     else:print(f'{n} is NOT perfect.')

 

■ 백준 1978 소수 찾기_브론즈2

n = int(input())
arr = list(map(int, input().split()))
prime_cnt = n
for i in arr:
    if i == 1: prime_cnt -= 1
    else:
        for j in range(2, int(i**0.5)+1):
            if i%j == 0:
                prime_cnt -= 1
                break
print(prime_cnt)

# #고수코드: continue를 적절히 사용함
# n = int(input())
# arr = list(map(int, input().split()))
# prime_cnt = 0
#
# for i in arr:
#     if i == 1: continue
#     for j in range(2, int(i**0.5)+1):
#         if i%j == 0: break
#     else: prime_cnt += 1
# print(prime_cnt)

 

■ 백준 2581 소수_브론즈2

m = int(input())
n = int(input())
arr = []
for i in range(m, n+1):
    if i == 1: continue
    for j in range(2, int(i**0.5)+1):
        if i%j == 0: break
    else: arr.append(i)
print(-1 if arr == [] else f"{sum(arr)}\n{arr[0]}")

# #고수코드: 1부터 n까지 소수 리스트를 먼저 만듦
# # 조금 이해가 안되긴 한다. 왜 내 코드보다 시간이 적게 걸리는지..
# # 내 코드: 56ms / 고수코드: 36ms
# m=int(input())
# n=int(input())
# l=[1]*(n+1)
# l[1]=0
# for i in range(2, int(n**(0.5))+1):
#     if l[i]:
#         for j in range(i*i, n+1,i):
#             l[j]=0
#
# l = [i for i in range(m,n+1) if l[i] == 1]
# if sum(l)==0: print(-1)
# else: print(sum(l), min(l), sep="\n")

 

■ 백준 11653 소인수분해_브론즈1 (복습)

# 루트를 넘어가는 소인수를 출력하는 방법에서 헤맸는데 머리가 어떻게 된 느낌
n = int(input())
for i in range(2, n+1):
    if n < i: break
    while n%i == 0:
        n //= i
        print(i)

# #고수코드: if 조건문...이것만 생각하면 됐는데...
# n = int(input())
# for i in range(2, int(n**0.5)+1):
#     while n%i == 0:
#         n //= i
#         print(i)
# if n!=1: print(n)