Greatest prime number

Asked

Viewed 79 times

-1

Could you help me with my code? I am trying to get the program to print the largest prime number the user has typed, but my program is printing the largest of ALL and not the largest prime. here is the code.

def primo(numero):     
   if (numero == 1):
       return False

   
   for d in range(2,(int)(numero/2)+1):
    
       if (numero % d == 0):
        return False
       
   else:
    return True

c = maior = 0   
while True:
   numero = int(input())
   if numero == 404:
       break
   if primo(numero):
       c += primo(numero)
   else:
       c -= primo(numero)
   if c == 1:
       maior = (numero)
   else:
       if (numero) > maior:
           maior = (numero)
      
       
if c > 0:
   print(f'{maior}')
else:
   print('SEM PRIMOS')
  • 2

    Wouldn’t it be simpler just to make a condition that if it’s prime and higher than the value maior then set the number to higher? Something like if primo(numero) and numero > maior: maior = numero. I don’t understand why you tried to count the number of cousins informed.

3 answers

1

Initially check if a number is prime, this is done in the second if inside while, and if the prime increments the primes quantity c, check that this prime number is greater than the maior if so maior receives the numero.

By prints you follow this exchange of values. If c is greater than 0 so there is at least one prime number

def primo(numero):
    
  if (numero == 1):
      return False 
  for d in range(2,(int)(numero/2)+1):  
      if (numero % d == 0):
        return False    
  return True

c = maior = 0   
while True:
  numero = int(input())
  if numero == 404:
      break
  if primo(numero):
      print('é primo '+str(numero))
      c += primo(numero)
      if numero > maior:
        maior = (numero)
        print('maior '+str(maior))      
      
if c > 0:
  print(f'{maior}')
else:
  print('SEM PRIMOS')

1

Knowing that:

  • f(x) = 2x + 1 | x N is the function in the set of natural numbers defining the odd numbers.

  • range(0) is an empty sequence.

  • At the express [identificador ":="] expressão is a expression of assignment(vine PEP 572).

  • At the express x if C else y is a conditional expression.

  • The code below does not perform validation tests for user input.

  • The operator // is the division for the nearest integer(see Floor Division).

You can simplify your algorithm by making it more efficient and readable:

def primo(n):     
  #Testa n para saber se é 1 ou par diferente de 2...
  if n == 1 or (n != 2 and n % 2 == 0):                  
    return False                             #...caso seja uma ou ambas as condições retorna False. 
  #x percorre o intervalo [0, n/4[ no conjunto do números naturais...
  for x in range(n // 4):
    #...testa o n para saber se é divisível por um ímpar...
    if n % 2*x+1 == 0:
      return False                           #...se sim retorna False.
  return True                                #Passado em todos o testes retorna True.

c = False                                    #Flag que indica e se houve a entrada de um primo pelo usuário.
m = 0                                        #Declara o maior número.
while True:    
   #Testa a entrada n para saber se é 404...
   if (n:= int(input())) == 404:
       break                                 #...se n for 404 abandona o laço.
   #Testa se n é maior que m e se é primo, indicando ou não a entrada dum numero primo pelo usuário.
   if n > m and (c:= primo(n) or c):
     m = n                                   #...se sim a ambas a condições m recebe n.
      
print(f'{m}' if c else 'SEM PRIMOS')

Tete the code on repl it.

0

You can take the numbers and add them to a list called Numbers, then to display the highest prime value is just to do asisim: print(max(int(number) for number in numbers if number % 2 !=0))

Browser other questions tagged

You are not signed in. Login or sign up in order to post.