Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 빅오메가
- homogeneous linear system
- Big Omega
- nonhomogeneous linear system
- 배열 섞기
- 코틀린 시작하기
- linear dependence
- 랜덤 순서 배열
- NumPy
- 코틀린 Hello World!
- 일차변환
- one-to-one
- trivial solution
- matrix-vector product
- itertools
- solutions of matrix equation
- 이진 탐색
- python
- nontrivial solution
- recursive algorithms
- Big-O 예제
- 재귀함수
- Big Theta
- matrix fo a linear transformation
- Big-Oh 예제
- 빅오 표기법
- 알고리즘 분석의 실례
- Big-Oh notation
- matrix trnasformations
- 빅세타
Archives
- Today
- Total
코딩 연습
(파이썬) 소인수 분해 본문
반응형
프로그래밍을 이용하여 수학문제를 풀때 의외로 소인수 분해를 해야할 일이 많아진다.
소인수 분해의 원리는 다들 잘 알고 있으리라 생각된다.
일단 소수들의 리스트를 만들어 놓고, 그것들을 하나씩 불러내서 소인수 분해 하고자 하는 수를 나누어 떨어지는 동안 계속 나눈다.
나누어 떨어지지 않게 되면 소수들의 리스트에서 다음 소수를 불러내 똑같은 작업을 반복한다. 이 작업을 몫이 1이 될때까지 계속한다.
예를 들어, 80을 소인수분해 하면 (몫, 소인수)가 다음과 같이 변해 갈 것이다.
(40, 2)
(20, 2)
(10, 2)
(5, 2)
이제 5는 2로 나누어 떨어지지 않으므로 3을 불러낸다. 그러나 5는 3으로도 나누어 떨어지지 않으므로 5를 불러낸다.
(1, 5)
이제 몫이 1이 되었으므로 소인수 분해를 멈추게 된다.
결과로는 [(2, 4), (5, 1)] 을 얻을 수 있다. 이것은 2가 4번 곱해지고 5가 1번 곱해지만 80이 된다는 의미이다.
코드는 다음과 같다.
from primetext import primelist
primenumber=primelist()
# primenumber는 1000000개의 소수를 포함한 리스트임
def factor(n):
result=[]
for i in primenumber:
count=0
while n%i==0:
count+=1
n=int(n/i)
if count!=0:
result.append((i, count))
# (소수, 개수) 형태로 리스트에 추가됨
if n==1:
break
return result
if __name__=="__main__":
number=int(input("소인수 분해할 숫자를 입력하시오 : "))
print(factor(number))
결과는 다음과 같다.
소인수 분해할 숫자를 입력하시오 : 3456
[(2, 7), (3, 3)]
반응형
'Python' 카테고리의 다른 글
(파이썬) 최대공약수 구하기 (0) | 2016.03.15 |
---|---|
(파이썬) 완전제곱수 판별 (0) | 2016.03.15 |
(파이썬) 소수판정 (0) | 2016.03.15 |
(파이썬) 모든 조합의 경우 나열하기 (0) | 2016.03.15 |
(파이썬) 소수 발생기 (0) | 2016.03.15 |
Comments