[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [obm-l] Clausula PROLOG para numeros primos



>From: Demétrius <demas1976@yahoo.com.br>
>
>[...]
>Verificar se existe divisão exata de X por todos os
>números maiores que 1 e menores que X. Se não existir
>o número é primo! (OK??!?!??!!!?)
>
>Alguém teria uma alguma outra sujestão?!?!?
>

Basta testar so os numeros ate sqrt(X).

>A minha cláusula PROLOG meia boca é:
>
>% Entrada de um dado número X e o divisor de
>% verificação par N = 2
>primo(X, N):- N < X, A is (X mod N), A\=0, N1 is N+1,
>primo(X, N1).
>
>DEVERIA Executar Assim:
>?primo(9, 2).
>no.
>?primo(11, 2).
>yes.
>
>Mas algo está errado.... Estou testando o 9 pois ele é
>impar é pequeno e não é primo!!
>[...]

Vc nao diz oque te leva a creer que algo esta errado.
Vc colocou o output esperado, mas nao colocou o que de fato retorna.
Sera que ta retornando sempre no?

Eu nao sei proplog mas acho que o yes ou no da resposta depende de todas
as ramificacoes serem ou nao verdadeiras

tente adicionar a seguinte clausula no comeco:
primo(X,X):- true.

Assim o seu programa mesmo que ineficiente deve te dar a resposta esperada.

Faz:
?- trace
?- primo(9,2)
?-primo(11,2)
?- notrace

Se vc quer uma ajuda mais detalhada em debugging o seu programa


=========================================================================
Instruções para entrar na lista, sair da lista e usar a lista em
http://www.mat.puc-rio.br/~nicolau/olimp/obm-l.html
=========================================================================