AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Potenzieren mit sehr großen Zahlen ohne modulus?????
Thema durchsuchen
Ansicht
Themen-Optionen

Potenzieren mit sehr großen Zahlen ohne modulus?????

Ein Thema von Dr.Hackstable · begonnen am 2. Dez 2005 · letzter Beitrag vom 3. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
Dr.Hackstable

Registriert seit: 30. Jul 2004
5 Beiträge
 
#1

Potenzieren mit sehr großen Zahlen ohne modulus?????

  Alt 2. Dez 2005, 12:51
Hallo

Ich möchte eine 512-bit zahl mit einer 512-bit Zahl potenzieren ohne modulus operation! Mathematisch ist das natürlich eine so verdammt große Zahl, dass kein Speicher dazu ausreichen würde!

die Formel sieht aber so aus
a,b,x,y seien 512-bit Zahlen die keinen ggt haben

Code:
ergebnis = a^x * b^y // Wobei y negativ ist
d.h
es entpricht

Code:
ergebnis = a^x / b^y
Aus theoretischen Überlegungen weiß ich dass das Ergebnis ganz sicher kleiner ist als 512-bit!

Kann man das irgendwie berechnen, ohne jeweils extra b^y und a^y berechnen zu müssen??

Danke
Grüße
Dr.Hackstable
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#2

Re: Potenzieren mit sehr großen Zahlen ohne modulus?????

  Alt 2. Dez 2005, 13:29
Mit welchem Datentyp rechnest du eigentlich?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Potenzieren mit sehr großen Zahlen ohne modulus?????

  Alt 2. Dez 2005, 13:29
(a^x)/(a^y) = a^(x-y)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#4

Re: Potenzieren mit sehr großen Zahlen ohne modulus?????

  Alt 2. Dez 2005, 13:36
Jetzt hast du die Gleichung umgestellt, und?
Aus der Informatik wissen wir, das sich alle Rechenoperationen aus der Addition zusammensetzen!
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Potenzieren mit sehr großen Zahlen ohne modulus?????

  Alt 2. Dez 2005, 14:12
Mach es doch so:
Delphi-Quellcode:
Function MegaPotenzierer (a,b,x,y : Extended) : Extended;
Const
  ccZero = 1E-5; // Hab vergessen, wie man floats auf 0 prüft
  ccMin = 0.000001; // kleinstes Zwischenergebnis
  ccMax = 100000000; // höchstes Zwischenergebnis

Begin
  Result := a; x:=x-1;
  Repeat
    while (x>ccZero) do begin
      Result := result * a;
      x:=x-1;
      if (Result > ccMax) Then Break; // jetzt nicht mehr weiterrechnen
      End;
 
    while (y>ccZero) do begin
      Result := result / b;
      y := y - 1;
      If Result > ccMax Then Break;
      End;
  Until (x<ccZero) and (y<ccZero); // Heisst das nicht 'IsZero (x)'?
End;
Ungetestet, aber ich potenziere so lange mit a, bis ich nicht mehr darf, oder bis das Zwischenergebnis größer als ein bestimmter Wert ist. Dann wird so lange durch b geteilt, bis ich nicht mehr darf, oder das Zwischenergebnis wieder kleiner als ein Minimalwert ist. Das wird so lange wiederholt, bis nichts mehr zu tun ist.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Dr.Hackstable

Registriert seit: 30. Jul 2004
5 Beiträge
 
#6

Re: Potenzieren mit sehr großen Zahlen ohne modulus?????

  Alt 2. Dez 2005, 20:31
a sollte ungleich b sein !
a <> b
also klappt das nicht mit (x-y)

was gehen würde wäre vielleicht:

Code:
ergebnis = exp ( x*lna - y*lnb)
Hilft mir aber auch nicht viel! Ich rechne mit IInteger Zahlen von Decmath!
Man kann damit beim Exponent bis max_integer rechnen, mehr würde auch keinen Sinn machen!

Aber trotzdem müsste es doch eine Lösung für mein Problem geben, da das Ergebnis kleiner ist als 512-bit!??
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Potenzieren mit sehr großen Zahlen ohne modulus?????

  Alt 2. Dez 2005, 23:09
Um dein Problem einmal umzuformulieren:

Du möchtest z.B. 4^9 / 5^7 = 3 ausrechnen, ohne vorher 4^9 (262144) bzw. 5^7 (78125) vollständig ausrechnen zu müssen (ich hab' jetzt mal deine 512 Binärstellen auf 1 Dezimalstelle reduziert, das Ergebnis passt auch in eine Dezimalstelle).

Da es sich nach deiner Aussage um teilerfremde Zahlen handelt, wüßte ich dafür keinen Ansatz.

Einfacher wäre es natürlich, wenn du mit a*(2^x) und b*(2^y) rechnen würdest - aber das wird wohl nicht gehen.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: Potenzieren mit sehr großen Zahlen ohne modulus?????

  Alt 2. Dez 2005, 23:43
Es gäbe da einen Weg:

Berechne die Primfaktorzerlegung von a^x und b^y. Dann kannst du beide Tabellen der Primzahlexponenten jeweils bei gleicher Basis die Exponenten subtrahieren. Das was übrig ist ist die Tabelle der Primzahlexponenten von a^x/b^y und wird einfach ausmultipliziert.

In Unit NCombi.pas findest du die Funktionen NPowerTable() und NPrd() die das mit den Faktultäten demonstrieren. Das wäre der einzigste Weg der mir einfällt im Moment um wirklich das Ergebnis aufs letzte Bit exakt ausrechnen zu können.

Gruß Hagen
  Mit Zitat antworten Zitat
Dr.Hackstable

Registriert seit: 30. Jul 2004
5 Beiträge
 
#9

Re: Potenzieren mit sehr großen Zahlen ohne modulus?????

  Alt 3. Dez 2005, 01:23
hey thx, stimmt wann man das machen kann
NPowerTable() und NPrd()
Die zwei Funktionen habe ich nicht ganz kapiert , könntest du mir ein kleines Beispiel geben wie ich eine Primfaktorzerlegung mit einem IInteger zahl machen kann.

Zitat:
Dann kannst du beide Tabellen der Primzahlexponenten jeweils bei gleicher Basis die Exponenten subtrahieren.
"Bei gleicher Basis" tritt der Fall überhaupt auf???, a und b haben keinen gemeinsamen teiler?
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Potenzieren mit sehr großen Zahlen ohne modulus?????

  Alt 3. Dez 2005, 10:18
Zitat von Dr.Hackstable:
a,b,x,y seien 512-bit Zahlen die keinen ggt haben
Zitat von negaH:
Berechne die Primfaktorzerlegung von a^x und b^y. Dann kannst du beide Tabellen der Primzahlexponenten jeweils bei gleicher Basis die Exponenten subtrahieren. Das was übrig ist ist die Tabelle der Primzahlexponenten von a^x/b^y und wird einfach ausmultipliziert.
Welche gleiche Basis ?
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz