AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Primfaktorzerlegung läuft viel zu langsam...
Thema durchsuchen
Ansicht
Themen-Optionen

Primfaktorzerlegung läuft viel zu langsam...

Ein Thema von fapsons · begonnen am 28. Feb 2007 · letzter Beitrag vom 3. Mär 2007
Antwort Antwort
Seite 3 von 3     123   
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: Primfaktorzerlegung läuft viel zu langsam...

  Alt 28. Feb 2007, 14:11
@MatWur:

Erkennt der Compiler also beim Kompilieren das x nicht verändert wird!?
Kann man das irgendwie nachlesen?
  Mit Zitat antworten Zitat
MatWur

Registriert seit: 22. Feb 2007
Ort: Spessart
26 Beiträge
 
Delphi 7 Enterprise
 
#22

Re: Primfaktorzerlegung läuft viel zu langsam...

  Alt 28. Feb 2007, 14:18
ja, das erkennt der Compiler. Auszug aus der Delphi Language Reference:

Zitat von Delphi Language Reference:
For purposes of controlling execution of the loop, the expressions initialValue and finalValue are evaluated only once, before the loop begins.
danach folgt noch die Erklärung, das dies der wesentlichste Unterschied zur Repeat- und While-Schleife ist.

mfg

Matthias
Matthias
Es gibt drei verschiedene Arten von Mathematikern: die, die bis 3 zählen können und die, die das nicht können.
Ich gehöre zur mittleren Gruppe.
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: Primfaktorzerlegung läuft viel zu langsam...

  Alt 28. Feb 2007, 14:29
@MatWur:

Toll! Jetzt habe ich auch wieder was dazugelernt!

Danke...
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#24

Re: Primfaktorzerlegung läuft viel zu langsam...

  Alt 28. Feb 2007, 14:46
Außerdem wäre es möglich gewesen den Wert einmal in eine Variable zu schreiben

PS: Irgendwie komme ich mit der Erklärung nicht da, weil eine solche Schleife funzt:
Delphi-Quellcode:
j := 2;
for i := 0 to j do
  j := j + 1;
Und er würde da nie rausspringen (außer i ist zu groß )
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
MatWur

Registriert seit: 22. Feb 2007
Ort: Spessart
26 Beiträge
 
Delphi 7 Enterprise
 
#25

Re: Primfaktorzerlegung läuft viel zu langsam...

  Alt 28. Feb 2007, 15:03
die angegebene Schleife funktioniert zwar, aber die Schleife wird exakt 3 mal durchlaufen, für i=0, i=1 und i=2. Der Endwert der Schleife (j=2) wird innerhalb der Schleife *nicht* verändert obwohl die Variable geändert wird. Aber der geänderte Variablenwert wird nicht als neuer Endwert der Schleife eingesetzt.

Zitat von xZise:
Außerdem wäre es möglich gewesen den Wert einmal in eine Variable zu schreiben
genau das wird getan in eine eigene Variable für den Endwert die du dann nicht mehr siehst oder ändern kannst.

mfg

Matthias
Matthias
Es gibt drei verschiedene Arten von Mathematikern: die, die bis 3 zählen können und die, die das nicht können.
Ich gehöre zur mittleren Gruppe.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#26

Re: Primfaktorzerlegung läuft viel zu langsam...

  Alt 28. Feb 2007, 19:02
Selstam.... es ging mal ... naja vielleicht täushce ich mich xD
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#27

Re: Primfaktorzerlegung läuft viel zu langsam...

  Alt 28. Feb 2007, 19:12
Das hier ist ein sauschneller Code für eine Primfaktorzerlegung:
(ist halt Konsole, aber mit sehr wenig Arbeitsaufwand umzuwandeln...)

Delphi-Quellcode:

label
  lbl1,lbl2,lbl3,lbl4,lbl5,lbl6,lbl7,lbl8,lbl9;

var
  a,b: Integer;
  c: Extended;

begin
goto lbl2;

lbl1:
writeln('2');
a:=a div 2;
if a=1 then goto lbl9;

lbl2:
if frac(a/2)=0 then goto lbl1;
b:=3;

lbl3:
c:=sqrt(a)+1;

lbl4:
if b>=c then goto lbl8;
if frac(a/b)=0 then goto lbl6;

lbl5:
b:=b+2;
goto lbl4;

lbl6:
if a/b*b-a=0 then goto lbl7;
goto lbl5;

lbl7:
writeln(IntToStr(b));
a:=a div b;
goto lbl3;

lbl8:
writeln(IntToStr(a));

lbl9:
readln;
(ist unübersichtlich aber schnell)

//Edit1: Ich hab vergessen zu erwähnen, dass a die zu zerlegende Zahl ist!
//Edit2: Weiß jemand, ob ich das veröffentlichen darf, denn es war im Handbuch meines GTRs in Basic abgedruckt, habs eig. nur in Delphi verwandelt
  Mit Zitat antworten Zitat
Yamato

Registriert seit: 13. Apr 2006
Ort: Berlin
2 Beiträge
 
Delphi 4 Standard
 
#28

Re: Primfaktorzerlegung läuft viel zu langsam...

  Alt 3. Mär 2007, 18:45
Das kann man sogar noch verbessern: alle Primzahlen außer 2 und 3 sind von der Form 6n+-1 (dadurch werden alle Vielfachen von 3 eliminiert).

Eine kurze Erklärung einiger besserer Verfahren sowie ein Java-Applet gibt's hier:
http://www2.informatik.hu-berlin.de/~schoenbe/

Wer Lust auf Theorie hat, kann das ja mal in Delphi umsetzen.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: Primfaktorzerlegung läuft viel zu langsam...

  Alt 3. Mär 2007, 19:34
Zitat von fLaSh11:
Das hier ist ein sauschneller Code für eine Primfaktorzerlegung:
Na dann googel mal nach dem 'Sieve of Atkins'. Das findet alle Primzahlen bis 2^32 in ca. 1 Sekunde
Zitat von fLaSh11:
//Edit2: Weiß jemand, ob ich das veröffentlichen darf, denn es war im Handbuch meines GTRs in Basic abgedruckt, habs eig. nur in Delphi verwandelt
Ja, es ist banal und wird Keinen interessieren.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#30

Re: Primfaktorzerlegung läuft viel zu langsam...

  Alt 3. Mär 2007, 20:36
Hallo alzaimar,

Atkins ist der Halbgott mit der Gitarre, der Mathematiker heißt Atkin *grin*

Es gibt ein ausgefeiltes Sieve of Eratosthenes, welches für den 32-bit Zahlenraum eine gute bzw. bessere Wahl ist. Das Sieve of Atkin trumpft jenseits dieser Grenze auf, wenn ich richtig gelesen habe.

Noch ein Link: High Speed Factoring

Gute Nacht
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 19:11 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