별 건 아니고 교재 보고 내가 더 보기 좋게 최적화 한거 꺼드럭거리려고 왔다.
기존 교재의 소수 판별법 이다.
# 컴퓨터 괴롭히기
counter = 0
for n in range(2, 101):
for i in range(2,n):
counter += 1
if n % i == 0:
break
else:
print(n)
print("Counter:", counter)
이런 식으로 할 경우 중복되는 거 까지 하기에 손해라고 최적화 한 방법을 알려준다.
# 컴퓨터 살살 괴롭히기
counter = 0
ptr = 0
prime = [None] * 500
prime[ptr] = 2
ptr += 1
for n in range(3, 1001, 2):
for i in range(1, ptr):
counter += 1
if n % prime[i] == 0:
break
else:
prime[ptr] = n
ptr += 1
for i in range(ptr):
print(prime[i])
print("Counter:", counter)
기존에 알아낸 소수로만 나누길 반복해 계산 수를 획기적으로 줄인 방식이다.
# 트렌디하게 패기
counter = 0
prime = [2]
for n in range(3, 1001, 2):
for i in range(len(prime)):
counter += 1
if n % prime[i] == 0:
break
else:
prime.append(n)
for i in range(len(prime)):
print(prime[i])
print("Counter:", counter)
그리고 append를 활용해 무식하게 크기만 한,
쓰지도 않을 리스트를 구현하는 대신
하나씩 추가해가게 한 나만의 방식이다.
사실 크게 알고리즘을 바꾸거나 해서 최적화 한건 아니다만…
그래도 바로 생각해낸 나 스스로에게 칭찬 하려 남긴다.