첫번째 방법

import time
n = 100000000
factors = []
s = time.time()
for i in range(1, n+1) :
  if n%i == 0 :
    factors.append(0)
print('소요시간 : ', time.time() - s)

소요시간 : 6.5초

두번째 방법

(예를들어) 12의 약수 [1, 2, 3, 4, 6, 12] 중 자신을 제외하고 가장 큰 약수는 12의 절반인 6이니까, 6까지만 12를 1~6으로 나누었을때 나머지가 0인지를 확인해보면 된다. 7~11은 어차피 약수가 아니니까 안나눠봐도 된다는 소리다.

import time
n = 100000000
factors = []
s = time.time()
for i in range(1, n//2 +1) :
  if n%i == 0 :
    factors.append(0)
factors.append(n)
print('소요시간 : ', time.time() - s)

// -> 소수점을 버린다

소요시간 : 3.29초

세번째 방법

12에 루트를 씌운 값까지만 루프를 돌리면 된다.

import time
n = 100000000
factors = []
s = time.time()
for i in range(1, int(n**0.5) +1) : # ** => 제곱근.  n**0.5는 n에 루트를 씌운거다
  if n%i == 0 : 
    factors.append(i) # 나눠 떨어지면 넣는다
    if i != n//i :
        factors.append(n//i) # 몫도 넣는다. 그러면 [1, 12, 2, 6, 3, 4] 이렇게 들어간다.
print('소요시간 : ', time.time() - s)

i != n//i 는 9같은경우 3이 두번들어갈 수 있기 때문에 체크해주는거다.