본문 바로가기

백준

[BaekJoon/Python3] 약수, 배수와 소수

 

 

<5086번 : 배수와 약수>

https://www.acmicpc.net/problem/5086

# 조건1 : factor, 조건2 : multiple, 조건3 : neither

while (1) :
    A,B = map(int, input().split())

    if A==0 and B==0:
        break
    if B % A == 0:
        print('factor')
    elif A % B == 0 :
        print('multiple')
    else:
        print('neither')

 

 

☆ while(1), while True : 무한 반복문 → 무한 루프를 사용하여 어러 개의 테스트 케이스를 처리할 수  있도록 함.

 

 

 

<2501번 : 약수 구하기>

https://www.acmicpc.net/problem/2501

 

integer modulo by zero ← 0으로 나누게 될 경우 나타나는 오류

 

N, K = map(int, input().split())
nums = []
i = 1
# N의 약수 구하기
for i in range(1, N+1):
    if N % i == 0 :
        nums.append(i) # i를 nums 리스트에 추가
if len(nums) < K :
    print(0)
else:
    print(nums[K-1])

 

 

 

<9506번 : 약수들의 합>

 

https://www.acmicpc.net/problem/9506

 

while True:
    n = int(input())
    if n == -1:
        break;
    nums = []
    for i in range(1, n):
        if n % i == 0:
            nums.append(i)
    if sum(nums) == n:
        print(n,' = '," + ".join(str(i) for i in nums), sep="")
    else:
        print(n, "is NOT perfect.")

 

☆ 완전수 제약조건 풀 때 sum()함수 이용!

[join()]

.join(리스트) : 매개변수로 들어온 ['a','b','c']이런 리스트를 'abc'의 문자열로 합쳐서 반환해주는 함수

'구분자'.join(리스트) : 리스트의 값과 값 사이에 '구분자'를 넣어서 하나의 문자열로 합쳐준다.

 

 

 

<1976번 : 소수 찾기>

N = int(input())
nums = list(map(int, input().split()))
cnt = 0 # 소수 갯수

for num in nums:
    if num == 1: # 1은 소수가 아님
        continue
    for x in range(2, num):
        if(num % x ==0):
            break
    else:
        cnt +=1
print(cnt)

 

 

☆ 주어진 수를 2부터(1은 소수가 아니므로!!)

- nums리스트의 각 숫자 num에 대해 반복

- 2부터 num-1까지의 숫자 x에 대해 num을 x로 나누어 나머지가 0인 경우가 있는지 확인 → 나머지가 0인경우가 있다면 num은 소수가 아니므로 break문을 사용하여 내부 for문을 종료/ 만약 내부 for루프가 끝까지 완료되었다면 (else문 실행) num은 소수 → cnt 1 증가

- else문은 for루프가 break 없이 완료되었을 때 실행 → 이 때 cnt 증가

 

 

<2581번 : 소수>

 

https://www.acmicpc.net/problem/2581

M = int(input())
N = int(input())

sosu = [] # 소수
for num in range(M,N+1): # M이상 N이하
    cnt = 0 # 소수가 아니면 카운트
    if num > 1: # 2이상의 수들 중에서 소수를 찾는다.
        for x in range(2, num): # 2~num에서 나눠지는 수를 찾는다.
            if (num % x ==0): # 나머지가 0이면 소수 아님
                cnt +=1
                break
        if cnt == 0: # cnt = 0일 때 : 나눠지는 수가 없을 때! => 소수
            sosu.append(num)
if len(sosu) > 0:
    print(sum(sosu))
    print(min(sosu))
else:
    print('-1')

 

☆ 총합 → sum()함수!!!! / 최솟값 → min()함수!!!!!

 

 

 

 

 

<11653번 : 소인수분해>

N = int(input())
i = 2
while N > 1:
    if N % i == 0:
        N = N // i
        print(i)
    else:
        i += 1

 

- 소인수분해를 위해 초기 소수 후보 i를 2로 설정

- if절 : N이 i로 나누어 떨어지는지 확인

--> 나누어 떨어지면 N을 i로 나누어 갱신하고 i를 출력

--> 나누어 떨어지지 않으면 i를 증가시켜 다음 소수 후보 확인

 

'백준' 카테고리의 다른 글

시간 복잡도  (0) 2024.07.25
기하  (0) 2024.07.25
일반수학1  (0) 2024.07.24
[BaekJoon/Python3] 백준 10798번 : 세로읽기  (0) 2024.07.24
[BaekJoon/Python3] 백준 2566번 : 최댓값  (0) 2024.07.24