Ir para conteúdo
Fórum Script Brasil
  • 0

Processos em Paralelo


PeriWinkle

Pergunta

Seguinte, to querendo desenvolver um programinha que ache números primos. Só que eu queria usar todo os cores disponiveis na minha máquina. A principio desenvolvi um codigo inicial, porém só consigo chegar até o número 10, depois disso nenhum outro primo é impresso. Se alguém souber o que tenho que modificar seria de grande ajuda.

import math
import sys
from multiprocessing import Process


def verificaPrimos(numeroCandidato):
    if numeroCandidato < 2:
        return 0
    else:
        raiz = int(math.sqrt(numeroCandidato))
        if raiz%2 == 0:
            raiz = raiz - 1
        #end_if
        while raiz >= 3:
            if numeroCandidato%raiz == 0:
                return 0
            #end_if
        #end_while
    #end_if_else
        return 1
        
def multProcess(numInicial,numFinal,numCores):
    passo = numCores*2
    contNumeros = numInicial
    contPrimos = 0
    while contNumeros <= numFinal:
        print "Verificando %s" %contNumeros
        if verificaPrimos(contNumeros) == 1:
            contNumeros = contNumeros + passo
            contPrimos = contPrimos + 1
        else:
            contNumeros = contNumeros + passo
        #end_if_else
    #end_while
    print "Encontrados: %s" %contPrimos

if __name__ == "__main__":
    if len(sys.argv) <> 4:
        print "Parametros Incorretos"
    else:
        if int(sys.argv[1]) % 2 == 0:
            valorInicial = int(sys.argv[1])+1
        else:
            valorInicial = int(sys.argv[1])
        #end_if_else
        p1 = Process(target=multProcess, args=(valorInicial, int(sys.argv[2]), int(sys.argv[3])))
        p1.start()
        p2 = Process(target=multProcess, args=(valorInicial+2, int(sys.argv[2]), int(sys.argv[3])))
        p2.start()
    #end_if_else

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Problema resolvido. O erro estava na função:

def verificaPrimos(numeroCandidato):
    if numeroCandidato < 2:
        return 0
    else:
        raiz = int(math.sqrt(numeroCandidato))
        if raiz%2 == 0:
            raiz = raiz - 1
        #end_if
        while raiz >= 3:
            if numeroCandidato%raiz == 0:
                return 0
            #end_if
        #end_while
    #end_if_else
        return 1
Que não estava atualizando a raiz dentro do laço, modificando para
def verificaPrimos(numeroCandidato):
    if numeroCandidato < 2:
        return 0
    else:
        raiz = int(math.sqrt(numeroCandidato))
        if raiz%2 == 0:
            raiz = raiz - 1
        #end_if
        while raiz >= 3:
            if numeroCandidato%raiz == 0:
                return 0
            raiz = raiz - 2
            #end_if
        #end_while
    #end_if_else
        return 1

Tudo se resolveu

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...