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

Hochzahlen *schäm*

Beitragvon FiRe^ » 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])

Beitragvon mawe » Mittwoch 8. Dezember 2004, 15:44

Hi!

5**3 sollte reichen :wink:

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

Beitragvon Dookie » 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: Alles auswählen

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

Beitragvon FiRe^ » 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])

Beitragvon mawe » 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

Beitragvon FiRe^ » Mittwoch 8. Dezember 2004, 16:45

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

Beitragvon fs111 » 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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » 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

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

Beitragvon mawe » Mittwoch 8. Dezember 2004, 17:32

Hi fs111!

Es reicht schon bis zur Wurzel.

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

Beitragvon Leonidas » 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

Beitragvon FiRe^ » 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])

Beitragvon mawe » 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

Beitragvon Gast » Mittwoch 8. Dezember 2004, 18:18

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

Beitragvon Dookie » 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: Alles auswählen

#!/usr/bin/env python
import this

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder