Mal zurueck zum Thema Geschwindigkeit... ich hab mir vor... - ja ich weiß garnichtmehr - ...ein oder zwei Wochen, mal eine kleine Schleife gebaut, die die letzte Primzahl vor einer Gegebenen Zahl sucht.
Also zB gibst du die 10000 an und bekommst dann 9973 zurueck.
Und als ich hier im Thread stoeberte kam mir mal die Idee, einen Vergleich zu ziehen... die Schleife normal und mit Psyco:
(gezeigt wird immer die Ausgabe der dritten Ausfuehrung)
Code: Alles auswählen
psy@BrAIN1ak> ./letzte_primzahl.py 100000
99991 ( 0.0576159954071 secs)
psy@BrAIN1ak> ./letzte_primzahl.py 1000000
999983 ( 0.548065900803 secs)
psy@BrAIN1ak> ./letzte_primzahl.py 10000000
9999991 ( 5.59474992752 secs)
und jetzt... *trommelwirbel*
Code: Alles auswählen
psy@BrAIN1ak> ./letzte_primzahl_psyco.py 100000
99991 ( 0.00420188903809 secs)
psy@BrAIN1ak> ./letzte_primzahl_psyco.py 1000000
999983 ( 0.0389289855957 secs)
psy@BrAIN1ak> ./letzte_primzahl_psyco.py 10000000
9999991 ( 0.379332065582 secs)
...ja nun bin ich wirklich sprachlos

Vorallem weil dieser Geschwindigkeitszuwachs durch zwei Zeilen Code entsteht. Hier der Code, fuer interessierte:
Code: Alles auswählen
#!/usr/bin/python
from sys import argv
from time import time
import psyco
psyco.full()
stop = int(argv[1])
def quer(x):
x = [int(n) for n in list(str(x))]
return sum(x)
def is_prim(x):
if str(x).endswith("5"): return False
elif int(str(x)[-1])%2 == 0: return False
elif x>10:
if quer(x)%3 == 0: return False
n = 2
while n<x:
if x%n == 0: break
else: n+=1
else:
return True
return False
stamp = time()
while not is_prim(stop): stop -= 1
stamp=time()-stamp
print stop, '(', stamp, 'secs)'
natuerlich koennte man noch abfangen, ob Psyco ueberhaupt installiert ist usw... aber naja... es ist ja nur fuer mich, eigentlich

[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2