Week2-6 | prime_factorization.py

Seongeun·2023년 6월 22일

week2

목록 보기
6/9
post-thumbnail

Week2-6. Prime factorization(소인수분해)

  • Prime number(소수) : 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수이다.

  • Prime factorization(소인수분해): 1보다 큰 자연수를 소수들만의 곱으로 나타내는 것이다.

 #예제1: 100-1000사이의 난수를 소인수 분해하고 각각의 소인수에 대한 지수를 출력하는 프로그램 코드

 import random

 randNum = random.randint(100,1000)
 primeDiv = []
 n = 2

 print('Random number : {}'.format(randNum))

 num = randNum  #randNum을 유지하면서 반복문을 실행하기 위해 한번 더 다른 변수에 할당한다.

 while n <= num:
     if num % n == 0:
         primeDiv.append(n)
         num /= n   

     else:
         n += 1

 print('Prime factorization of {} : {}'.format(randNum,primeDiv))

 print('-'*10)

 tempNum = 0

 for n in primeDiv:  #list with 'for' : list의 요소값이 순서대로 n에 할당된다.
     if tempNum != n:
         print('Exponential of {} : {}'.format(n,primeDiv.count(n)))  #list.coount(n):list에 특정 요솟값이 몇개 있는지 출력한다.
         tempNum = n
#예제2: 72에 x를 곱하면 y의 제곱이 된다고 할 때, 가장 작은 정수 x를 구하는 코드

 n = 2
 num = 72
 primeDivisor = []

 while n <= num:

     if num % n == 0:
         if primeDivisor.count(n) == 0:
             primeDivisor.append(n)
         elif primeDivisor.count(n) == 1: #이미 같은 소인수가 입력되어 있는 경우 해당 소인수를 지운다.
             primeDivisor.remove(n)

         num /= n                         # 나눈 몫을 userNum에 할당한 후 소인수 분해를 이어간다.

     else:
         n += 1

 print('x = {}'.format(primeDivisor))     #1번 곱해진 소수만 남는다.

0개의 댓글