728x90
728x90

문제

숫자 N은 아래와 같다.

N=2a×3b×5c×7d×11e

N이 주어질 때 a, b, c, d, e 를 출력하라.

 

제약 사항

N은 2 이상 10,000,000 이하이다.

 

입력

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 번째 줄에 N 이 주어진다.

 

출력

출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

 

예제

[입력] [출력]
10  
6791400
1646400
1425600
8575
185625
6480
1185408
6561
25
330750
#1 3 2 2 3 1
#2 6 1 2 3 0
#3 6 4 2 0 1
#4 0 0 2 3 0
#5 0 3 4 0 1
#6 4 4 1 0 0
#7 7 3 0 3 0
#8 0 8 0 0 0
#9 0 0 2 0 0
#10 1 3 3 2 0

 

문제 해결 방법

  • for 문을 이용하여 일일히 나누는 방식으로 문제를 해결하였다.
  • 나눠질 때마다(N % div == 0) 해당 answer 배열의 인덱스에 있는 값을 1씩 증가시켜주었다. 
num_list = [2, 3, 5, 7, 11]
answer = [0, 0, 0, 0, 0]
while N != 1:
for idx, div in enumerate(num_list):
if N % div == 0:
answer[idx] += 1
N = N // div

 

코드

T = int(input())
for test_case in range(1, 1 + T):
N = int(input())
num_list = [2, 3, 5, 7, 11]
answer = [0, 0, 0, 0, 0]
while N != 1:
for idx, div in enumerate(num_list):
if N % div == 0:
answer[idx] += 1
N = N // div
print(f"#{test_case}", end=' ')
print(' '.join(str(item) for item in answer))

 

참고

  • 난이도: D2

 

소인수 분해 알고리즘

def prime_factors(n):
factors = []
# 2로 나누어 떨어지는 동안 나눔
while n % 2 == 0:
factors.append(2)
n //= 2
# 3부터 시작하여 홀수 소수로 나눔
for i in range(3, int(n**0.5) + 1, 2):
while n % i == 0:
factors.append(i)
n //= i
# n이 소수인 경우
if n > 2:
factors.append(n)
return factors

 

참고 사이트

 

[Algorithm] 소인수 분해(Prime/Integer Factorization)

소인수 분해(Prime/Integer Factorization) 개념 특정 자연수를 1보다 큰 자연수인 소인수(소수인 인수)들만의 곱으로 표현하는 것 합성수를 소수의 곱으로 나타내는 방법 소인수 분해를 일의적으로 결

dev-astra.tistory.com

 

728x90
728x90

문제제약 사항입력출력예제문제 해결 방법코드참고소인수 분해 알고리즘참고 사이트