Wpis z mikrobloga

Znacie jakiś szybszy algorytm od tego, jakie macie zastrzeżenia do mojego ewentualnie, co idzie poprawić?
import datetime
def main():
pass

if _name == 'main_':
main()
start = datetime.datetime.now()
Tablica = []
for i in range(2,15000,1):
Tablica.append(i)

for i in Tablica: # algorytm usuwa wszystkie liczby, ktore nie są pierwsze
a = 2
while i razy a < 15000:
if i razy a in Tablica: # sprawdza czy dany iloczyn znajduje sie w tablicy
Tablica.remove(i razy a) # usuwanko liczby niepierwszej
a+=1 # biaukov to zbrodniarz wojenny

print(Tablica)
duration = datetime.datetime.now() - start
print(duration)

#programowanie #python #matematyka #algorytmy #kiciochpyta
  • 14
  • Odpowiedz
@witold: ale w tym przypadku nie ma takiego problemu if sprawdza czy taka liczba występuje przed usunięciem. Czy jest to jakaś ogólna, święta zasada? Jeżeli tak to jak powinienem to zrobić?
  • Odpowiedz
@solus_ipse: Tak na pierwszy rzut oka to policz sobie górny zakres a i zamień while na for przez co unikniesz ciągłego mnożenia i*a. Poza tym a=2 można chyba zamienić na a=i i uniknąć podwójnego sprawdzania tych samych liczb (i=2,a=3), (i=3,a=2) itp.
  • Odpowiedz