Primzahlenzwillinge ggT von 3 Zahlen und kgV

Werbung
Primzahlenzwillinge
Definition:
Primzahlenzwillinge sind zwei ungerade Primzahlen deren Abstand 2 beträgt.
Prädikatfunktion:
primzwillinge(P,Q) :- P > Q, primzwillinge(Q, P),!.
primzwillinge(P,Q) :- prim(P), prim(Q), Q is P + 2.
out_prim_zwill(Von, Bis) :- (0 is Von mod 2), Von1 is Von + 1, out_prim_zwill(Von1, Bis),
!.
out_prim_zwill(Von, Bis) :- Von < Bis, Q is Von + 2, Q =< Bis,
primzwillinge(Von, Q), write(Von-Q),nl, out_prim_zwill(Q, Bis).
out_prim_zwill(Von, Bis) :- Von < Bis, Q is Von + 2, Q =< Bis,
not(primzwillinge(Von, Q)), out_prim_zwill(Q, Bis).
out_prim_zwill(N) :- out_prim_zwill(3, N),!.
Prädikatarbeitsweise:
Zunächst wird festgelegt, wann zwei Zahlen P und Q Primzahlen sind. Dann wird Ausgabe
von Primzahlenzwillingen von Von bis Bis mit out_prim_zwill(Von,Bis) realisiert. Da nur
ungerade Zahlen Primzahlenzwillinge sein können, wird zunächst sichergestellt, dass Von
eine ungerade Zahl ist. Dann wird falls Von und Von+2 noch im Intervall getestet und bei
Erfolg ausgegeben und dann wird für die nächste ungerade Zahl (Von+2) out_prim
(VonP2,Bis) aufgerufen.
ggT von 3 Zahlen und kgV
Arbeitsweise:
Der ggT von drei Zahlen lässt sich einfach bestimmen indem man zunächst den ggT von der
ersten und der zweiten Zahl. Man erhält eine Zahl n1. Der ggT aller drei Zahlen ist dann
gleich dem ggT von der dritten Zahl und n1.
Das kgV von zwei zahlen ergibt sich aus dem Produkt der Zahlen geteilt durch den ggT.
Prädikatfunktion:
gcd(M,N,O,L) :- gcd(M,N,L1), gcd(L1,O,L).
kgv(M,N,L) :- GGT is gcd(M,N), L is M*N//GGT.
Java-Programme:
import java.util.*;
public class Zahltheo {
public int gcd(int M,int N) {
if(N==0)
return M;
return gcd(N,M % N);
}
public boolean prim(int N) {
if(N<=1)
return false;
double sqrtN = Math.sqrt(N);
return primtest(2, sqrtN, N);
}
public boolean primtest(int von, double bis, int N) {
if(von >= N)
return true;
if(von >= bis)
return true;
if(N % von == 0)
return false;
return primtest(von+1, bis, N);
};
}
Vergleich imperativer deklartiver Programmierung:
imerativ
deklartiv
Beschreibung des
Lösungswegs
Beschreibung der Lösung
Hilfmittel
Variablen und deren
Initialisierung, Schleifen,
bedingte Anweisungen und
Funktionsaufrufe
Variablen, Fakten und Regeln
Vergleichsbeispiel
Primzahltest (nicht rekusiv,
siehe unten)
Primzahltest (siehe Blatt)
Lösungsfindung
in einer Schleife wird von
Von bis Bis getestet, ob ein
Teiler existiert.
mittels eines Testprädikats
wird festgestellt, ob in einem
Bereich von Von bis Bis kein
Teiler zur getesteten Zahl
existiert
import java.util.*;
public class Zahltheo
{
public boolean prim(int N)
{
if(N<=1)
return false;
if(N == 2)
return true;
if(N % 2 == 0)
return false;
double sqrtN = Math.sqrt(N);
for(int i=2; i <= sqrtN; i++)
{
if( N % i == 0)
return false;
}
return true;
}
}
Herunterladen