1. 알고리즘
"C로 배우는 알고리즘"은다음과 같이 알고리즘을 표현합니다.
1. 정수 N을 입력받는다.
2. 정수 i에 2를 대입한다.
2.1 N이 i로 나누어 떨어지는가? (% 연산자를 사용)
2.1.1 나누어 떨어지면 소수가 아니다. 끝
2.2 i를 하나 증가시킨다.
2.3 i가 N보다 작은가?
2.3.1 작으면 2.1로 돌아간다.
3. 정수 N은 소수이다. 끝
2. 동작 코드
이를 코드를 작성하였습니다.
def is_prime(n):
for i in range(2, n):
if n % i == 0:
return False
return True
개선을 위해서 모든 숫자에 대해서 검사하지 않고, sqrt()를 이용해서 범위를 줄였습니다.
def is_prime2(n):
sqrn = int(math.sqrt(n))
for i in range(2, sqrn+1):
if n % i == 0:
return False
return True
3. 실행 코드
실행 코드는 다음과 같이 작성했습니다. ("C로 배우는 알고리즘" 리스트 1-5 : PRIME2.C에 대응)
def print_results(i, n, r, t):
if r:
print('Test case', i, ":", n, "is prime in", t)
else:
print('Test case', i, ":", n, "is not prime in", t)
# Main function
LOOP = 10000
print("Test input number is prime or not")
print("Input 0 to end program")
while True:
print()
input_data = int(input("Input number to test -> "))
if input_data < 0:
print("Please input positive integer")
if input_data == 0:
print("End of program")
break
start_time = time.process_time()
for i in range(0, LOOP):
test_result = is_prime(input_data)
end_time = time.process_time()
print_results(1, input_data, test_result, end_time-start_time)
start_time = time.process_time()
for i in range(0, LOOP):
test_result = is_prime2(input_data)
end_time = time.process_time()
print_results(2, input_data, test_result, end_time-start_time)
4. Tips
1. is_prime2()에서 for loop의 range에 +1을 사용해야 합니다.
5. 예제 코드
'프로그래밍 > Python 초보자가 작성하는 "C로 배우는 알고리즘"' 카테고리의 다른 글
[03-1.1] curses module (0) | 2018.04.29 |
---|---|
[03-1] 미로에 갖힌 생쥐 - 1/3 (2) | 2018.04.29 |
[01-3] 에라토스테네스의 체 (0) | 2018.04.28 |
[01-1] 최대공약수 찾기 (0) | 2018.04.25 |
[00] 들어가면서 (0) | 2018.04.25 |