Dzień dobry!
Piszę sobie programik prosty, który ma sprawdzać, czy podana liczba jest liczbą pierwszą (a jeśli nie jest, to ma szukać kolejnej).
Wszystko pięknie, do momentu, w którym zauważyłem, że niektóre liczby wyskakują jako pierwsze, mimo że nimi nie są.
W szczególności: badam sobie liczbę 49729, która jest kwadratem liczby 223. Mój programik mówi, że 49729 jest liczbą pierwszą.
Postanowiłem sprawdzić, jakim cudem mu to wychodzi. Okazało się, że w trakcie sprawdzania kolejnych podzielników pojawiają się dziwaczne wyniki. W tym wypadku, jak w tytule, pojawia się 49729 / 223 = 223.044(...). Totalnie zgłupiałem.
Poniżej wklejam programik, wystarczy go uruchomić i wpisać 49729, problem widać od razu. O co tu chodzi, co zrobiłem źle?
import time
import math
start_time = time.time()
num = int(input("Start from: ")) #49729 - prime number(?!) - 49729 / 223 = 223(!)
# Input 49729 and it says it's a prime
#6k±1
num = int(num/6)
num = num*6+5
oscylacja = 2
while True:
limit = math.sqrt(num)
print ("-----------------------------")
print ("num =",num)
divisor=int(5)
oscylator = 2
while (divisor<=limit):
print (num/divisor) # This is to show the problem - with 49729/223 you get 223.044... instead of 223, Why?
print ("---")
if (num % divisor) == 0:
print (num,"is not a prime")
print (divisor,"x",num//divisor,"=",num)
divisor=5
num+=oscylacja
if (oscylacja==2):
oscylacja = 4
else:
oscylacja =2
print ("-----------------------------")
print ("num =",num)
else:
divisor+=oscylator
if (oscylator==2):
oscylator = 4
else:
oscylator=2
else:
print (num,"is a prime")
print (divisor)
break
print ("--- %s seconds ---" % int((time.time() - start_time)))