Jump to content
msmsms

minimo divisor e numero primo

Recommended Posts

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?

Share this post


Link to post
Share on other sites
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'

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites
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).

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.