파이썬 문제풀이/구현

[삼성 sw 파이썬] 1945 간단한 소인수분해

ari0930 2024. 9. 8. 14:04

[삼성 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))

 

 

반응형