Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

msmsms

minimo divisor e numero primo

Mensagens Recomendadas

msmsms    1
msmsms

boas podem-me confirmar se esta resolução de obter um minimo dividor e um numero primo está bem?

def min_divisor(n):
   for i in range(2, n//2 + 1):
    if n % i == 0:
	    return i
    else:
	    return 1
def primo(n):
   return min_divisor(n)==1

ha forma mais simples e clara de obter o minimo dividor?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
msmsms    1
msmsms

esta resolução para numero primo tambem estaria bem?

# um numero primo é aquele que tem apenas 2 divisores distintos (1 ou ele mesmo)
def primo(n):
   if n/n == 1:
    return 'primo'
   elif n == 1:
    return 'primo'
   else:
    return 'não primo'

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    10
djthyrax

Em relação ao primeiro post, esse código não funciona: o loop só corre 1 vez.

Em relação ao segundo post, n/n é sempre 1.


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    312
Rui Carlos

boas podem-me confirmar se esta resolução de obter um minimo dividor e um numero primo está bem?

def min_divisor(n):
for i in range(2, n//2 + 1):
	if n % i == 0:
		return i
	else:
		return 1
def primo(n):
return min_divisor(n)==1

ha forma mais simples e clara de obter o minimo dividor?

Assim de repente, isso dá-me ideia que te vai devolver o máximo divisor, não? Na verdade nem isso vai fazer, visto que tens o else dentro do ciclo, logo a função vai terminar sempre na primeira iteração (ou seja, o return 1 devia estar fora do ciclo).

(O mínimo divisor positivo de um número é sempre o 1, pelo que assumo que pretendas excluir este.)

esta resolução para numero primo tambem estaria bem?

# um numero primo é aquele que tem apenas 2 divisores distintos (1 ou ele mesmo)
def primo(n):
if n/n == 1:
	return 'primo'
elif n == 1:
	return 'primo'
else:
	return 'não primo'

Se olhares com atenção para o código que escreveste, vais chegar à conclusão que isso está errado.

O que escreveste foi mais ou menos isto: se um número é divisível por ele mesmo, então é primo. Tendo em conta que todos os números são divisíveis por ele mesmo, todos os números seriam primos? O mesmo pode-se dizer para a segunda condição.

Um número não é primo se for divisível por ele próprio ou por 1 (pois todos verificam estas condições), um número é primo se apenas for divisível por ele próprio e por 1. Ou seja, é primo se não tiver mais divisores para além desses dois. (Há ainda o número 1, que normalmente não é considerado primo por convenção.)

Aquilo que tens de testar é se o número tem mais algum divisor para além dele próprio e do 1.

Se no cálculo do mínimo divisor excluíres o 1, podes usar essa função para determinar se o número é primo (se um primo só tem como divisores 1 e ele próprio, se excluis o 1, então o mínimo divisor de um primo terá que ser ele próprio).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    594
thoga31

A matemática diz-nos que um número primo só é divisível por si e por 1. Na programação não podemos só testar isso, porque estas condições qualquer número cumpre. Voltemos a ver a definição: "um número primo é divisível por si e por 1" - o ponto fulcral é aquele "só", e é este "só" que nós temo de testar!


Knowledge is free!

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.