Mam 17 lat, rozpoczynam programowanie za pomocą języka programowania Python.Czy ktoś może mnie nauczyć, jak zoptymalizować ten skrypt "drukuj do n-tego pierwszego numeru"?
Starałem się zoptymalizować ten algorytm, być może poprzez wyeliminowanie jednej z pętli lub z lepszym testem w celu sprawdzenia liczb pierwszych.
Próba obliczenia i wyświetlenia 100000 liczb pierwszych powoduje wstrzymanie skryptu na około 6 sekund, ponieważ wypełnia listę wartościami liczb pierwszych, zanim lista liczb pierwszych zostanie zwrócona do konsoli jako wynik.
Byłem eksperymentować z użyciem
print odd,
po prostu wydrukować każdy znaleziony liczbą pierwszą, która jest szybsza w przypadku mniejszych nakładów, takich jak n = 1000, ale dla n = 1000000 listy sama drukuje znacznie szybciej (zarówno w powłoce Pythona i w konsoli).
Być może cały kod/algorytm powinien zostać przebudowany, ale skrypt powinien pozostać zasadniczo taki sam: użytkownik wpisuje liczbę liczb pierwszych do wydrukowania (n), a skrypt zwraca wszystkie liczby pierwsze do n-tego numer.
from time import time
odd = 1
primes = [2]
n = input("Number of prime numbers to print: ")
clock = time()
def isPrime(number):
global primes
for i in primes:
if i*i > number:
return True
if number%i is 0:
return False
while len(primes) < n:
odd += 2
if isPrime(odd):
primes += [odd]
print primes
clock -= time()
print "\n", -clock
raw_input()
może chcę przepisać cały skrypt użyć sita jak sito Atkin: http://en.wikipedia.org/wiki/Sieve_of_Atkin
jednak jestem po prostu początkujący w Pythonie (lub nawet przy programowaniu: Zacząłem pisać tylko 2 kod kilka tygodni temu) i byłoby dla mnie dużym wyzwaniem wymyślić jak kodować algorytm Sieve of Atkin w Pythonie.
życzę hakera google tam będzie ręka trzymać mnie za rzeczy, jak to :(
To jest świetne pytanie, ale uważam, że lepiej pasuje do codereview.stackexchange.com. Przeciążenie stosu jest głównie przeznaczone dla konkretnych pytań programistycznych, które mają ostateczne odpowiedzi. – templatetypedef