La Web del Programador: Comunidad de Programadores
 
    Pregunta:  22823 - NÚMEROS PRIMOS EN PROLOG
Autor:  Eliel Azpeitia Acosta
Hola espero que alguien me pueda ayudar, necesito saber la forma de como realizar un programa en lenguaje visual prolog 5.2, el cual realize un chequeo de los numeros que son primos, pues ya he intentado por varias formas, pero siempre me saca numeros que no son primos, o me marca errores, espero que me puedan resolver mi problema, de antemano les agradezco las molestias.

  Respuesta:  Adrian Silva Ulloa
DOMAINS

i=integer
lista=i*

PREDICATES
nondeterm for(i,i,i)
primo(i,lista)
nondeterm primo2(i,i)
muestra(lista, string)
tiene_divisor(i)
CLAUSES
primo(Max,LP):-findall(P,primo2(Max,P),LP),!.
primo2(Max,P):-for(2,Max,P),not(tiene_divisor(P)).

tiene_divisor(P):-_P=P-1,for(2,_P,D),0 = P mod D,!.

for(I,B,I):-I<=B.
for(A,B,I):-A
muestra([X|L],S):-muestra(L,Sm),str_int(Sx,X),format(S,"%,%",Sx,Sm),!.
muestra([],""):-!.

Y desde algún menú ingresa:

Msg="Ingrese el valor máximo para lista de primos",
InitStr="10",
Title="Listado de primos",
NST=dlg_GetStr(Title,Msg,InitStr),
str_int(NST,NM),
primo(NM,Lp),
muestra(Lp,SLp),

Title2="Los primos son",
dlg_Note(Title2,SLp),
!.

  Respuesta:  Solitario Vega
cicloP(N,A,S):-A>N,S is 0,!.
cicloP(N,A,S):- N mod A=:=0,A==N,A1 is A+1,cicloP(N,A1,Sm),S is Sm+A,!.
cicloP(N,A,S):- A1 is A+1,cicloP(N,A1,Sm),S is Sm.

verifPrimo(N):-cicloP(N,1,T),T=:=1;N=:=1.

  Respuesta:  David becerra corchado
Conoces el algoritmo de euclides?
Intenta implementarlo, si tienes problemas me escribes y t lo mando. No lo hago ahora xq no lo tengo a mano.
Espero haberte sido de ayuda.