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

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



 
  Oi, pessoal, um abraço para todos! Sou novo na
lista, e estou começando a estudar matemática mais
seriamente há algum tempo. Espero poder contribuir com
questões interessantes.
  Aqui está um programinha que eu fiz em Haskell, uma
linguagem "funcional", para listar números primos:

***********
 non_multiplos n (h:t) = if (mod h n)/=0 then
 		h:(non_multiplos n t)
		else (non_multiplos n t)
 primos_aux (h:t) = h:(primos_aux (non_multiplos h t))
 primos = primos_aux [2..]
***********

  "non_multiplos" elimina de uma lista todos os
multiplos de um n. "primos_aux" pega uma lista, mantém
o primeiro número e elimina os seus múltiplos, e
depois se aplica recursivamente ao resto da lista.
"primos" aplica "primos_aux" à lista dos números
inteiros ("[2..]" é uma notação para
[2,3,4,5,6,7...]). Não mexo com Prolog há muitos anos,
mas talvez a idéia seja útil.
  Se v. estiver procurando sarna pra se coçar, eu vi
esse site há algum tempo:
  
http://www.cse.iitk.ac.in/news/primality.html

  Esses caras fizeram um método eficiente pra testar
se um número é primo ou não, sem precisar ficar
dividindo número por número. Não sei se é fácil de
programar.

  Abraços,
  Maurício
  

--- Murilo Rebouças Fernandes de Lima
<mrllima@terra.com.br> wrote:

>   sempre o quadrado perfeito de dois primos ira dar
> errado... reveja a sua 
> formula. nao precisa trestar sqrt(x) e sim de 2 ate
> parte inteira de sqrt(x) 
> e no caso de ser inteiro sqrt(x)-1...
> 
> 
>   >> >DEVERIA Executar Assim:
>   >> >?primo(9, 2).
>   >> >no.
>   >> >?primo(11, 2).
>   >> >yes
>   > Estes eram os resultados esperados, o que
> acontece é:
>   > ?primo(3, 2).
>   > yes.
>   > ?primo(4, 2).
>   > no.
>   > ?primo(5, 2).
>   > yes.
>   > ?primo(6, 2).
>   > no.
>   > ?primo(7, 2).
>   > yes
>   > ?primo(8, 2).
>   > no.
>   > ?primo(9, 2).
>   > yes.
>   >
>   > Parece que consegui determinar apenas se o
> número é
>   > ímpar ou não!
>   >
>   > O algoritmo PROLOG executa em árvore com
> unificação.
>   > Resumindo, de acordo com sua dedução de as
>   > ramificações serem verdadeiras!
>   >
>   > Não tenho o compilador instalado na minha
> máquina aqui
>   > no trabalho mas vou testar em casa e retorno
> depois!
>   >
>   > Obrigado!
>   >
>   >
>   > --- Qwert Smith <lord_qwert@hotmail.com>
> escreveu:
>   >
>   >> >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??!?!??!!!?)
>   >> > (...)



		
__________________________________ 
Discover Yahoo! 
Use Yahoo! to plan a weekend, have fun online and more. Check it out! 
http://discover.yahoo.com/
=========================================================================
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
=========================================================================