Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Primzahlen ausrechnen mal anders... (https://www.delphipraxis.net/128376-primzahlen-ausrechnen-mal-anders.html)

Teekeks 28. Jan 2009 20:37


Primzahlen ausrechnen mal anders...
 
Hi!
Ich bin gerade dabei eine Methode zu entwickeln, wie man die Primzahlen von 1 bis 1000000 ausrechnet.
Ich kenne das Sieb des Eratosthenes kenn ich schon, aber ich wollte mal was anderes ausprobieren.
Mein bisheriger Code rechnet wie verrückt aber spuckt nichts aus... woran liegt das?
Delphi-Quellcode:
const N=1000000;
var k,zz,z:longint;
    a:array[1..N] of longint;
    prim:boolean;
   
procedure ifprim(zahl:longint);
begin
    for k:=1 to z do
    begin
      if not zahl=k then
        if zahl mod a[k]=0 then
          prim:=false else
          begin
            prim:=true;
            z:=z+1;
            a[z]:=zahl;
            break;
//            write(a[z]:8);
//            z:=z+1;
          end;
    end;
    if prim then
    for k:=a[z] to zahl do
    begin
      if not zahl=k then
        if zahl mod k=0 then
           prim:=false else
          begin
            prim:=true;
            a[z]:=zahl;
            write(a[z]:8);
            break;
 //           z:=z+1;
          end;
    end;
    if prim then
    begin
//      write(a[z]:8);
      z:=zahl;
    end;
end;

begin
  a[1]:=2; a[2]:=3;
  z:=2;
  prim:=true;
  writeln('Begin?');
  readln;
  write(a[1]:8,a[2]:8);
  for zz:=3 to N do
  begin
    ifprim(zz);
  end;
end.
ich bin echt am verzweifeln... :cry:

gruß Teekeks

[edit=Luckie]Rechtschreibfehler im Titel korrigiert. Primzahl schreibt man ohne "ie". ;) Mfg, Luckie[/edit]
[ich auch edit] Ich hab die anderen korrigiert... ^^[/edit]

mkinzler 28. Jan 2009 20:42

Re: Priemzahlen ausrechnen mal anders...
 
Ist z initialisiert? Und mit was?

TBx 28. Jan 2009 20:43

Re: Priemzahlen ausrechnen mal anders...
 
z, B. diese Zeile
Delphi-Quellcode:
    for k:=1 to z do
bringt Dich nicht so wirklich weiter, da Du im Hauptprozedurrumpf z einmalig mit 2 initialisierst. Da kann in den nachfolgenden Abrfagen nie was gefunden werden.

so als erster Anhaltspunkt, Deinen Code durchschaue ich irgendwie nicht so ganz.
Erklähr mal, wie es eigentlich funktionieren sollte.

Gruß
Thomas

Abgesendet trotz rotem Kasten, mkienzlers Frage wird gleich mitbeantwortet ;-)

jfheins 28. Jan 2009 20:45

Re: Priemzahlen ausrechnen mal anders...
 
Ich vermute mal, es ist die (nicht optimierte) Probedivision.

In diesem Fall würde ich auch um ein paar Erläuterungen bitten, da der Code wirklich nicht allzu klar ist ...

P.S. Prim schreibt man wie Primzahl ohne "e" ;) :mrgreen:

Teekeks 28. Jan 2009 20:52

Re: Priemzahlen ausrechnen mal anders...
 
Also ok. Der Code soll Primzahlen raussuchen (von 1 bis 1000000) und zwar nach folgendem Chema (wie schreibt man das nun schon wieder??)
Soll in dem array mit den bisherigen Primzahlen gucken ob dort eine glatte Division geht, wenn ja --> rausspringen und nächste Zahl drannehmen.
Wenn nicht --> gucken ob im Rest bis (optimiert trunc(sqrt(zahl))) irgentwo mod=0 vorkommt. Wenn ja --> rausspringen und nächste Zahl.
Wenn nicht --> Zahl ausgeben und im array Abspeicher. z+1 setzen.

Ich weis nurnicht, warum der das nicht macht :(

Hawkeye219 28. Jan 2009 20:54

Re: Priemzahlen ausrechnen mal anders...
 
Hallo,

abgesehen vom undurchsichtigen Algorithmus:

Code:
"if not zahl=k then" <> "zahl <> k"
Gruß Hawkeye

TBx 28. Jan 2009 21:21

Re: Priemzahlen ausrechnen mal anders...
 
Ziel: Primzahlen raussuchen (von 1 bis 1.000.000)
Schema:
  • soll in dem array mit den bisherigen primzahlen gucken ob dort ne glatte division geht, wenn ja --> rausspringen und nächste zahl drannehmen.
soweit ok
  • wenn nicht --> gucken ob im rest bis (optimiert trunc(sqrt(zahl))) irgentwo mod=0 vorkommt. wenn ja --> rausspringen und nächste zahl.
  • wenn nicht --> zahl ausgeben und im array abspeicher. z+1 setzen.
Wozu soll das noch gut sein?
Ist eine Zahl durch irgendeine Primzahl kleiner der Zahl teilbar, so ist die Zahl definitiv keine Primzahl, anderenfalls ist es eine. Wozu also die weiteren Überprüfungen?

Gruß Thomas

Teekeks 29. Jan 2009 05:18

Re: Primzahlen ausrechnen mal anders...
 
hmmm. Stimmt auch irgentwie...

Luckie 29. Jan 2009 08:00

Re: Primzahlen ausrechnen mal anders...
 
Ichhabe mal den Rechtschreibfehler im Titel korrigiert. Primzahl schreibt man ohne "ie". Die Fehler im Code kannst du selber verbessern.

MrSpock 29. Jan 2009 08:13

Re: Primzahlen ausrechnen mal anders...
 
Hallo Teekeks,

benutzte doch bitte die in der deutschen Schriftform übliche Groß- und Kleinschreibung. Dadurch wird der Text leichter lesbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
Seite 1 von 2  1 2      

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