[삼성 sw 파이썬] 1945 간단한 소인수분해
문제
숫자 N이 주어질 때 N=2^a * 3^b * 5^c *7*d * 11^e의 형태로 표현할 수 있다.
이때 a,b,c,d,e를 출력하라
풀이
기본적인 구현 문제로 while를 사용하여 2,3,5,7,11 모두 다 하면서 a, b, c, d, e를 구하는 방법이 가장 기본적으로 있다
이때 while부분이 반복되기에 함수로 만들어서 재귀형태로 풀어서 문제를 풀었다.
def factors(number,a,count):
if number % a != 0:
return [count,number]
return factors(number//a,a,count+1)
number은 현재수이고 a는 나눌수 count 몇 번이나 a로 나누어 버렸는지 카운트하는 수이다.
그리고 더이상 a로 나눌 수 없다면 count와 현재수를 반환 하다록 하였다.
현재 수를 반환 하는 이유는 다음 a=2일 때를 구하고 난 후 3일 때도 구해야 하고 5일 때도 구해야 하기에 반환하도록 하였다.
전체 코드
def factors(number,a,count):
if number % a != 0:
return [count,number]
return factors(number//a,a,count+1)
test=int(input())
for t in range(test):
n=int(input())
ans=[]
array=[2,3,5,7,11]
for i in array:
f=factors(n,i,0)
ans.append(f[0])
n=f[1]
print("#{} {} {} {} {} {}".format(t+1,ans[0],ans[1],ans[2],ans[3],ans[4]))
while 을 반복한 코드
test=int(input())
for t in range(1,test+1):
n=int(input())
a=0
b=0
c=0
d=0
e=0
while n%2==0:
n=n//2
a+=1
while n%3==0:
n=n//3
b+=1
while n%5==0:
n=n//5
c+=1
while n%7==0:
n=n//7
d+=1
while n%11==0:
n=n//11
e+=1
print("#{} {} {} {} {} {}".format(t,a,b,c,d,e))
반응형
'파이썬 문제풀이 > 구현' 카테고리의 다른 글
[삼성 sw 파이썬] 4371 항구에 들어오는 배 (1) | 2024.10.02 |
---|---|
[삼성 sw 파이썬] 3131. 100만 이하의 모든 소수 (1) | 2024.09.28 |
[삼성 sw 파이썬] 19185 육십갑자 (0) | 2024.09.05 |
[삼성sw 파이썬] 15230 알파벳 공부 (0) | 2024.08.24 |
[삼성sw 2001 파이썬] 파리 퇴치 (0) | 2024.07.15 |