jun-wiki

View My GitHub Profile

Posts (Latest 10 updated) :
Read all

별 건 아니고 교재 보고 내가 더 보기 좋게 최적화 한거 꺼드럭거리려고 왔다.

기존 교재의 소수 판별법 이다.

# 컴퓨터 괴롭히기

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를 활용해 무식하게 크기만 한,

쓰지도 않을 리스트를 구현하는 대신

하나씩 추가해가게 한 나만의 방식이다.

사실 크게 알고리즘을 바꾸거나 해서 최적화 한건 아니다만…

그래도 바로 생각해낸 나 스스로에게 칭찬 하려 남긴다.