Hochzahlen *schäm*

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
FiRe^
User
Beiträge: 14
Registriert: Samstag 25. September 2004, 18:25

Moin,
ich komm aus der VB-Ecke und da bereche ich Hochzahlen so: 5^3
Das "^" ist aber in Python (und in allen andren Sprachen auch :D ) ein XOR!
Ich muss doch nicht wirklich 5*5*5 rechnen, oder? :oops:

mfg,
fiRe
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

5**3 sollte reichen :wink:

Gruß, mawe
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi FiRe^,

es gibt auch die Builtinfunktion pow(x, y[, z])
pow(x, y) ist dabei gleichbedeutend mit x**y,
pow(x, y, z) entspricht (x**y) % z ist aber effizienter.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
FiRe^
User
Beiträge: 14
Registriert: Samstag 25. September 2004, 18:25

Danke! Ich hab noch eine Frage. Also ich erstelle einen "Zufalls"-long int mit dem random-Modul und will nun prüfen ob es sich um eine Primzahl handelt:

Code: Alles auswählen

def IsPrime(Number):
    for i in xrange(2, Number - 1):
        if Number % i == 0: return False
    return True


nr1, nr2 = pow(10, 200), pow(10, 300)

while 1:
    myNumber = random.randint(nr1, nr2)
    if IsPrime(myNumber):
        break
Aber ich bekomme bei der Funktion IsPrime einen Overflow (OverflowError: long int too large to convert to int)

Wie kann ich das beheben? Oder gibts auch eine eingebaute Funktion zur Primzahlenprüfung?
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!
FiRe^ hat geschrieben: Oder gibts auch eine eingebaute Funktion zur Primzahlenprüfung?
Glaub ich nicht. Aber hier findest Du einige Varianten.

Gruß, mawe
FiRe^
User
Beiträge: 14
Registriert: Samstag 25. September 2004, 18:25

Hi mawe. Die Varianten da funktionieren alle nicht. Gibt nen Overflow :(
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Du musst ja gar nicht alle Zahlen überprüfen, sondern nur bis zur Hälfte der Zahl, denn jede Zahl die größer ist als die Hälfte kann kein Teiler mehr sein.

fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Soll ich dir mal meinen Primzahlen Benchmark schicken? Der ist extra auf Performance programmiert, auch wenn mir das mißlungen ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast

Hi!

@fs111: Selbst wenn ich die Zahl durch 2 Teile gibts noch einen Overflow
@Leonidas: Funktioniert der denn mit solch großen Zahlen?
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi fs111!

Es reicht schon bis zur Wurzel.

Gruß, mawe
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Anonymous hat geschrieben:@Leonidas: Funktioniert der denn mit solch großen Zahlen?
Ich seh grad, nein.. interessant.. für's xrange brauche ich einen int und keinen long int..
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
FiRe^
User
Beiträge: 14
Registriert: Samstag 25. September 2004, 18:25

Hoi! :D

Als ich habs jetzt so gelöst:

Code: Alles auswählen

def IsPrime(Number):
    for i in xrange(999999999, int(math.sqrt(Number)) + 1, 2):
        if Number % i == 0: return False
    return True
Das sieht zwar super blöd aus, aber was solls..
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Und das funktioniert? Ich bekomm die selbe Fehlermeldung wie vorher. Ausserdem testest Du ja jetzt nur zwischen 999999999 und der Wurzel.

Gruß, mawe
Gast

ja aber die kleinste Zahl is ja pow(10, 10)
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi,

Milan hat mal ein xrange für Longs gemacht:
http://python.sandtner.org/viewtopic.php?t=1366


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dookie hat geschrieben:Milan hat mal ein xrange für Longs gemacht:
http://python.sandtner.org/viewtopic.php?t=1366
Cooler Code, muss ich bei Gelegenheit in meinen Benchmark einbauen und dann mal gucken. :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten