Sudal's Garage

Project Euler 3 본문

Programming/Project Euler - python

Project Euler 3

_Sudal 2019. 1. 30. 08:17

Question: 


The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?

문제:

어떤 수를 소수의 곱으로만 나타내는 것을 소인수분해라 하고, 이 소수들을 그 수의 소인수라고 합니다.
예를 들면 13195의 소인수는 5, 7, 13, 29 입니다.

600851475143의 소인수 중에서 가장 큰 수를 구하세요.


Solution:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from math import sqrt
 
primes = set([2])
value = 3
number = 600851475143
while value < sqrt(number):
    isPrime = True
    for k in primes:
        if value % k == 0:
            isPrime = False
            value += 2
    if isPrime:
        primes.add(value)
        if number % value == 0:
            print(value)
            number /= value
print(int(number))
cs

square root를 쓰기위해서 모듈 math 에서 메소드 sqrt 를 import 해왔다.

가장 큰 소인수는 sqrt(number)보다 작은 점을 이용하여 while loop을 짜고,


for loop 에서 소수인지 확인, 아닐경우 2를 더해주고, 소수일 때 까지 반복. 2를 제외한 짝수는 소인수가 될 수 없기 때문.

소인수일 경우에는, 본 수를 나눈다.


1
2
3
4
5
6
7
from math import sqrt
from sympy import sieve
 
number = 600851475143
primes = list(sieve.primerange(1,sqrt(number)))
 
print([primes[x] for x in range(len(primes)) if number % primes[x] == 0][-1])
cs

후에, 모듈 sympy 에서 prime number 를 출력해주는 함수를 찾게 되었고

2019/01/29 - [Programming/python] - Module: sympy


이렇게 업그레이드 되었다!



'Programming > Project Euler - python' 카테고리의 다른 글

Project Euler 5  (0) 2019.01.30
Project Euler 4  (0) 2019.01.30
Project Euler 2  (0) 2019.01.30
Project Euler 1  (0) 2019.01.30
Project Euler  (0) 2019.01.30