• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

RVG

SQl _ Numeros primos

16 mensagens neste tópico

Boax...

Ja que estao numa de propor desafios... :P

Este problema é bastante conhecido...

O objectivo: determinar os numeros primos, usando somente uma querie, e de preferencia, com sql standard :P

CREATE TABLE tab_inteiros
(n_inteiro INTEGER);

INSERT INTO tab_inteiros VALUES (0);
INSERT INTO tab_inteiros VALUES (1);
INSERT INTO tab_inteiros VALUES (2);
INSERT INTO tab_inteiros VALUES (3);
INSERT INTO tab_inteiros VALUES (4);
INSERT INTO tab_inteiros VALUES (5);
INSERT INTO tab_inteiros VALUES (6);
INSERT INTO tab_inteiros VALUES (7);
INSERT INTO tab_inteiros VALUES (8);
INSERT INTO tab_inteiros VALUES (9);
INSERT INTO tab_inteiros VALUES (10);
INSERT INTO tab_inteiros VALUES (11);
INSERT INTO tab_inteiros VALUES (12);
INSERT INTO tab_inteiros VALUES (13);
INSERT INTO tab_inteiros VALUES (14);
INSERT INTO tab_inteiros VALUES (15);
INSERT INTO tab_inteiros VALUES (16);
INSERT INTO tab_inteiros VALUES (17);
INSERT INTO tab_inteiros VALUES (18);
INSERT INTO tab_inteiros VALUES (19);
INSERT INTO tab_inteiros VALUES (20);

ou seja, pretendemos que o resultado seja: 1, 2, 3, 5, 7, 11, 13, 17, 19

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:P gostei :P fazendo....

SELECT * 
from tab_inteiros
where (num%2=0)

apareceme o 0 e o 1 nao

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boax...

nao...

um numero primo só é divisivel por ele proprio e por 1.

se estas a testar o 10, nao serve de muito ver se é divisivel por 15.  :P

Como modificastes, vou alterar tambem.... o teu codigo devolve os pares..

Ps. Não sendo de matematica, deixo o zero ao criterio das pessoas... se é ou nao primo..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

atao quer dizer k tem de dar 0 ao dividir por ele proprio e por 1?

nao entendi OMG a minha matematica ta mesmo ma fonix :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um numero primo tem que ser apenas divisivel por 1 e por ele mesmo (tipo o 3). Se dividires por outro qualquer numero, dá algo decimal. O que o RVG estava a dizer era o próprio 0 ser primo :P é que dividir por 0 é uma ... indeterminação (?). e é impossível. Mas acho que há quem defenda que o 0 é também um número primo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um numero primo tem que ser apenas divisivel por 1 e por ele mesmo (tipo o 3). Se dividires por outro qualquer numero, dá algo decimal. O que o RVG estava a dizer era o próprio 0 ser primo :P é que dividir por 0 é uma ... indeterminação (?). e é impossível. Mas acho que há quem defenda que o 0 é também um número primo...

tipo não me ta a aparecer o numero 1 e 2 :|

posso meter aqui a sql?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

aqui vai que vergonha :S

SELECT X.Num as Primos
FROM tab_inteiros N CROSS JOIN tab_inteiros X
WHERE X.Num%N.Num != 0 AND N.Num > 0 AND N.Num < X.Num and X.Num%2 !=0
GROUP BY X.Num

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu de SQL percebo pouco, mas acho que tens errado o conceito de primo :P

Tenta fazer uma query que pergunte: "Dividido por algum numero que nao ele mesmo == 1?" --> Não é primo

Outra sugestão que o RVG disse era evitares perguntar se 10 era divisível por 15, ou seja, só perguntas se o número é divísivel por outro, menor ou igual a ele :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O número 0 e o número 1 não são, por definição, primos.

Um número primo é aquele que tem 2 divisores. O número 1 só possui um, ele próprio.

2,3,5,etc possuem 2, eles próprios e o número 1.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É mais rápido se o código ignorar totalmente qualquer número par maior  que 2. A lógica parece me evidente =p

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro que o código pode ser optimizado. Mas se vais ignorar os múltiplos de 2, também podes ignorar os múltiplos de 3. E os de 5, e por aí fora. No limite, é muito mais rápido calcular os primos todos e metê-los numa tabela ;P

Uma forma mais lógica de optimizar é calcular só até ao SQRT do número actual. Mas para números até 20, a optimização não é crítica.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Apanhado! :P

eu não copiei :S apenas me baziei nesse exemplo o.0 Mas o que interessa e que eu entendi a logica... mas mesmo assim nao entendo porque o 1 e o 2 nao aparece :|

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora