Einzelnen Beitrag anzeigen
Alt 04.05.09, 12:07   #23 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 198
Standard

Prolog mit einem Sieb:
Code:
notprim(N,E):-E=\=N, mod(E,N)=:=0.
primlist([],[]).
primlist([E|T],[E|R]):- exclude(notprim(E),T,ExList), primlist(ExList,R),!.

filter(_,[_]).
filter(Min,[E,E2|T]):- (E>=Min,2 is E2-E,writeln(E-E2),true),filter(Min,[E2|T]),!.
paare(From,To):-numlist(2,To,List),primlist(List,Prims),filter(From,Prims).
bzw. "größenoptimiert" (aber weniger gut lesbar )
Code:
notprim(N,E):-E=\=N, mod(E,N)=:=0.
primlist([],[]). primlist([E|T],[E|R]):- exclude(notprim(E),T,ExList), primlist(ExList,R),!.
filter(Min,[E,E2|T]):- (E>=Min,E2-E=:=2 -> writeln(E-E2);true),filter(Min,[E2|T]),!.
paare(From,To):-numlist(2,To,List),primlist(List,Prims),filter(From,Prims).
Ausgabe:
Zitat:
?- paare(1,30).
3-5
5-7
11-13
17-19
fail.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61