Seite 1 von 1
Zahl mit einer Millon Stellen
Verfasst: Samstag 12. November 2016, 14:23
von erdal1934
Ich erzeuge eine Zahl mit einer Million Stellen.
Auf meinem Rechner dauert das 5 Minuten.
Kann man das schneller programmieren?
Code: Alles auswählen
num = 0
for i in range(0, 1000*1000)
num = num*10 + random.randint(0,9)
Re: Zahl mit einer Millon Stellen
Verfasst: Samstag 12. November 2016, 15:05
von Sirius3
Hat ungefähr 10 Sekunden zu programmieren gedauert. Ein Anfänger kann aber dafür auch 20 brauchen.
Re: Zahl mit einer Millon Stellen
Verfasst: Samstag 12. November 2016, 15:46
von BlackJack
Wobei beide Lösungen auch Zahlen mit weniger als einer Million Stellen erzeugen können.

Re: Zahl mit einer Millon Stellen
Verfasst: Sonntag 13. November 2016, 06:34
von erdal1934
Danke, Lösung von sirius braucht nur noch 2 Minuten auf meinem Rechner.
Re: Zahl mit einer Millon Stellen
Verfasst: Sonntag 13. November 2016, 12:09
von kbr
erdal1934 hat geschrieben:Danke, Lösung von sirius braucht nur noch 2 Minuten auf meinem Rechner.
Das geht bei mir erheblich schneller

:
Code: Alles auswählen
In [7]: %%timeit
...: lower = 10**1000000
...: upper = lower * 10 - 1
...: num = random.randint(lower, upper)
...:
100 loops, best of 3: 2.17 ms per loop
Compiler time: 0.24 s
Re: Zahl mit einer Millon Stellen
Verfasst: Sonntag 13. November 2016, 13:39
von BlackJack
@kbr: Vielleicht ist da die Zeit enthalten das Ergebnis auch auszugeben.

Re: Zahl mit einer Millon Stellen
Verfasst: Sonntag 13. November 2016, 14:11
von erdal1934
Nein, alter Rechner.
Re: Zahl mit einer Millon Stellen
Verfasst: Sonntag 13. November 2016, 14:35
von /me
erdal1934 hat geschrieben:Nein, alter Rechner.
Und deine erste Lösung läuft dann in 5 Minuten? Irgendwas passt da nicht. Hast du die for-Schleife noch stehen lassen und nur das Schleifeninnere ersetzt?
Re: Zahl mit einer Millon Stellen
Verfasst: Sonntag 13. November 2016, 14:58
von erdal1934
danke, ja
Re: Zahl mit einer Millon Stellen
Verfasst: Sonntag 13. November 2016, 18:58
von BlackJack
Mal zwei deutliche Laufzeitunterschiede:
Code: Alles auswählen
In [3]: import random
In [4]: %%timeit
...: num = 0
...: for i in range(0, 1000*1000):
...: num = num*10 + random.randint(0,9)
...:
1 loop, best of 3: 58min 53s per loop
In [5]: %%timeit
...: lower = 10**1000000
...: upper = lower * 10 - 1
...: num = random.randint(lower, upper)
...:
10 loops, best of 3: 45.1 ms per loop
Compiler time: 6.37 s
Gemessen auf einem Raspi 2.
Re: Zahl mit einer Millon Stellen
Verfasst: Montag 14. November 2016, 05:42
von gast8973
Meine Lösung. Langsamer als Lösung 2, aber schneller als Lösung 1.
Code: Alles auswählen
max = 1000000
num = int(''.join(str(random.randint(0,9)) for _ in range(0,max)))
Re: Zahl mit einer Millon Stellen
Verfasst: Dienstag 15. November 2016, 11:30
von /me
gast8973 hat geschrieben:Meine Lösung.
Na gut, wenn wir jetzt schon bei albernen Lösungen sind:
Code: Alles auswählen
int('{}{}'.format(random.choice('123456789'), ''.join(random.choice('0123456789') for _ in range(999999))))
Und 1 Million Stellen sind garantiert.
Re: Zahl mit einer Millon Stellen
Verfasst: Dienstag 15. November 2016, 13:16
von jerch
Wenn die Mindeststellenanzahl garantiert sein soll, kann man das so sicherstellen:
Code: Alles auswählen
num = 0
while len(str(num)) < 10000000:
num += random.randint(0, 10**1000000)
Hat auch ne super Laufzeit (im besten Falle nur einen Schleifendurchlauf!)

Re: Zahl mit einer Millon Stellen
Verfasst: Samstag 19. November 2016, 17:00
von heiner88
Falls man beide Darstellungen braucht, ist die alberne Lösung trotzdem viel schneller:
Code: Alles auswählen
str1 = '{}{}'.format(random.choice('123456789'), ''.join(random.choice('0123456789') for _ in range(999999)))
num1 = int(str1)
Code: Alles auswählen
lower = 10**1000000
upper = lower * 10 - 1
num2 = random.randint(lower, upper)
str2 = str(num2)