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
- Servo Motor
- Arduino IDE
- FDM
- MHEV
- 3D Printer
- Jansen Linkage
- 테오 얀센 메커니즘
- 아두이노 서보 모터
- support
- gcode
- 적층형 3D 프린터
- python
- 파이썬
- 큐라 사용법
- Arduino Ultrasonic Sensor
- 3D 프린터
- Drone
- LG gram
- Arduino Servo Motor
- 서보 모터
- Arduino
- 드론
- 2020 LG gram
- 아두이노 LED 예제
- 큐라
- Theo Jansen Mechanism
- Cura
- Cura 사용법
- Arduino LED example
- 아두이노
Archives
- Today
- Total
Mechanic 공방
Python 예제 - 프로젝트 오일러 3번 문제 (가장 큰 소인수 찾기) 2 본문
728x90
반응형
이번 포스팅에서는 저번에 구현하였던 프로젝트 오일러 3번 문제의 다른 구현 방법을 사용해보도록 하겠다.
저번 포스팅에서는 주어진 숫자의 모든 약수를 다 구한 뒤, 각각의 약수가 소수인지 일일이 확인하는 방식을 사용하였다.
하지만 이와 같은 방식은 너무 많은 계산양을 필요로 하기 때문에, 이번 포스팅에서는 조금 다른 방법으로 코드를 구현해보려 한다.
우선 코드는 아래와 같다.
num_max = 600851475143
i = 2
while num_max > 1:
if num_max%i==0:
num_max /= i
elif num_max==1:
break
else:
i += 1
print(i)
위 코드를 보면 양이 획기적으로 줄어든 것을 볼 수 있다.
먼저 주어진 숫자(num_max)를 2부터 1씩 증가시키면서 차례로 나눈다.
중간에 나누어 떨어지는 경우가 발생하면, num_max 값을 그 몫으로 대체한다.
이와 같은 계산을 반복하다가 num_max가 1이 되면 루프를 빠져나온다.
이때 i 값이 문제에서 구하고자 하는 가장 큰 소인수임을 알 수 있다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
이해가 잘 되지 않을 수 있으니 조금 작은 숫자로 위 코드의 흐름을 파악해보도록 하자.
num_max = 10
i = 2
[loop 1]
num_max = 10/2 = 5
i = 2
[loop 2]
num_max = 5
i = 3
[loop 3]
num_max = 5
i = 4
[loop 4]
num_max = 5
i = 5
[loop 5]
num_max = 1
break!
결과적으로 마지막 i 값인 5가 10의 가장 큰 소인수가 되는 것을 볼 수 있다.
728x90
반응형
'Python' 카테고리의 다른 글
Python 예제 - 프로젝트 오일러 3번 문제 (가장 큰 소인수 찾기) (0) | 2021.02.21 |
---|---|
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 |