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.
FiRe^
User
Beiträge: 14
Registriert: Samstag 25. September 2004, 18:25

Mittwoch 8. Dezember 2004, 15:19

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])

Mittwoch 8. Dezember 2004, 15:44

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:

Mittwoch 8. Dezember 2004, 15:48

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

Mittwoch 8. Dezember 2004, 16:05

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])

Mittwoch 8. Dezember 2004, 16:18

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

Mittwoch 8. Dezember 2004, 16:45

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

Mittwoch 8. Dezember 2004, 17:22

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 8. Dezember 2004, 17:29

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 Modvoice
Gast

Mittwoch 8. Dezember 2004, 17:32

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])

Mittwoch 8. Dezember 2004, 17:32

Hi fs111!

Es reicht schon bis zur Wurzel.

Gruß, mawe
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 8. Dezember 2004, 17:42

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 Modvoice
FiRe^
User
Beiträge: 14
Registriert: Samstag 25. September 2004, 18:25

Mittwoch 8. Dezember 2004, 18:08

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])

Mittwoch 8. Dezember 2004, 18:14

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

Mittwoch 8. Dezember 2004, 18:18

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:

Mittwoch 8. Dezember 2004, 18:58

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]
Antworten