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 | 31 |
Tags
- gcode
- Servo Motor
- python
- 드론
- 큐라 사용법
- MHEV
- 2020 LG gram
- Arduino LED example
- 3D 프린터
- 아두이노 서보 모터
- 아두이노 LED 예제
- LG gram
- Drone
- Theo Jansen Mechanism
- Cura 사용법
- 적층형 3D 프린터
- Arduino Servo Motor
- 큐라
- 테오 얀센 메커니즘
- Arduino Ultrasonic Sensor
- Arduino
- 아두이노
- 3D Printer
- Arduino IDE
- FDM
- Cura
- 서보 모터
- support
- 파이썬
- Jansen Linkage
Archives
- Today
- Total
Mechanic 공방
Python 예제 - 프로젝트 오일러 3번 문제 (가장 큰 소인수 찾기) 본문
728x90
반응형
이번 포스팅에서는 프로젝트 오일러 3번 문제를 코드로 구현해보겠다.
문제는 아래와 같다.
600851475143의 소인수들 중 가장 큰 숫자를 구하시오.
구현한 코드는 아래와 같다.
import math
num_max = 600851475143
num_list = []
num_list_2 = []
num_list_odd = []
for i in range(0,math.floor(num_max**0.5)):
if num_max%(i+1)==0:
num_list.append(i+1)
for i in num_list:
num_list_2.append(num_max/i)
num_list_2.reverse()
num_list.extend(num_list_2)
for i in num_list:
if i%2!=0:
num_list_odd.append(i)
for j in range(2,math.floor(i**0.5)):
if i%j==0:
num_list_odd.remove(i)
break
print(num_list)
print(num_list_odd)
print(max(num_list_odd))
위 코드는 우선 600851475143 의 약수를 모두 구한 뒤, 다시 각 약수들이 소수인지 확인하는 방식의 코드이다.
약수를 구하는 과정에서는 주어진 숫자의 루트 제곱근까지만 for문을 실행했으며, 1에서부터 차례대로 일일이 계산하였다.
구한 약수들은 num_list 라는 배열에 저장하였다.
약수들을 모두 구한 뒤, 다시 각 약수들에 대하여 소수가 아닌 숫자를 리스트에서 제외하는 방식으로 소수를 구하였다.
최종적으로 가장 큰 수를 print 하였다.
결과는 아래와 같이 나오게 된다.
첫번째 줄은 주어진 숫자의 약수를 모두 표시한 것이며, 두 번째 줄이 해당 약수들 중 소수인 수만 표시한 것이다.
마지막으로 6857이 주어진 600851475143의 약수 중 가장 큰 숫자이다.
하지만 위 코드는 굉장히 비효율적인 로직을 가진 코드이다.
약수를 일일이 다 구하고, 해당 약수들을 다시 일일이 소수인지 확인하기 때문이다.
다음 포스팅에서는 보다 효율적이지만 동일한 결과를 뽑아낼 수 있는 코드를 구현해보도록 하겠다.
728x90
반응형
'Python' 카테고리의 다른 글
Python 예제 - 프로젝트 오일러 3번 문제 (가장 큰 소인수 찾기) 2 (0) | 2021.02.27 |
---|---|
Python 예제 - 프로젝트 오일러 2번 문제 (피보나치 수열) (0) | 2021.02.15 |
Python 예제 - n번째 피보나치 수열 숫자 구하기 (0) | 2021.02.14 |
Python 예제 - 프로젝트 오일러 1번 문제 (Project Euler) (0) | 2021.02.13 |
Python 예제 - 숫자 맞추기 게임 (숫자 Up/Down) (0) | 2021.01.27 |