none
Conjectura de Goldbach RRS feed

  • Pergunta

  •  

    Senhores,

    boa tarde.

     

    Tenho uma matéria na faculdade chamada "Micro informática aplicada" que consiste em programação com VBA, no Excel.

     

    Acontece que o professor nos passou um exercicio na sala como "desafio", porém não estou conseguindo solucionar de forma alguma.

     

    Deste modo, venho solicitar aos Srs, alguma ajuda, se for possível, claro.

     

    Segue abaixo o enunciado:

     

    Segundo a conjectura de Goldbach, qualquer número par, maior que 2, pode ser escrito como a soma de dois números primos. Exemplo: 8 = 3+5; 16 = 11 + 5; 68 = 31 + 37 etc. Dados um conjunto de 100 números inteiros positivos, pares, fazer uma macro que calcule, para cada número, um par de números primos cuja soma seja igual ao próprio número.

     

    Ficaria muito agradecido se alguém pudesse postar um código que pudesse me ajudar.

     

     

    Obrigado.

     

     

    Jardyson Melo

     

     

    segunda-feira, 22 de setembro de 2008 15:38

Respostas

Todas as Respostas

  • Olá Jardyson,

     

    Veja a implementação da conjectura de Goldbach em Java para ter idéias Wink

    http://www.cs.princeton.edu/introcs/14array/Goldbach.java.html

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    segunda-feira, 22 de setembro de 2008 16:07
  • Pô a graça é tentar resolver o algoritmo.
    quarta-feira, 28 de novembro de 2012 22:19
  • Sub Exemplo()
        Dim lRow As Long
        Dim vGoldbach As Variant
        
        For lRow = 1 To 100
            vGoldbach = Goldbach(lRow)
            Cells(lRow, "A") = lRow
            If Not IsError(vGoldbach) Then
                Cells(lRow, "B") = vGoldbach(1)
                Cells(lRow, "C") = vGoldbach(2)
            End If
        Next lRow
    End Sub
    
    Function Goldbach(ByVal lNúmero As Long) 'As Long()
        'Retorna um vetor com índices 1 e 2, que retornam a primeira
        'e segunda parcelo de um número que satisfaz a Conjectura de Goldbach.
        
        Dim bIsPrimo() As Boolean
        Dim lIndex1 As Long
        Dim lIndex2 As Long
        Dim lPrimos As Long
        Dim alPrimos() As Long
        Dim lEsq As Long
        Dim lDir As Long
        
        Dim Temp 'As Variant
        
        'lNúmero deve ser maior que 2 e par:
        If Not lNúmero > 2 Or lNúmero Mod 2 = 1 Then
            Temp = CVErr(xlValue)
            GoTo Fim
        End If
            
        'Considera-se, incialmente, que todos números são primos:
        ReDim bIsPrimo(1 To lNúmero)
        For lIndex1 = 1 To lNúmero
            bIsPrimo(lIndex1) = True
        Next lIndex1
            
        'Todo número que é formado por um produto, não é primo.
        'Logo, subtrai-se todos esses números.
        lIndex1 = 2
        Do
            If bIsPrimo(lIndex1) Then
                lIndex2 = lIndex1 + 1
                Do While (lIndex1 * lIndex2) < lNúmero
                    bIsPrimo(lIndex1 * lIndex2) = False
                    lIndex2 = lIndex2 + 1
                Loop
            End If
            lIndex1 = lIndex1 + 1
        Loop While (lIndex1 ^ 2) < lNúmero
        
        'Criar um vetor com todos os números primos:
        For lIndex1 = 1 To lNúmero
            If bIsPrimo(lIndex1) Then
                lPrimos = lPrimos + 1
                ReDim Preserve alPrimos(1 To lPrimos)
                alPrimos(lPrimos) = lIndex1
            End If
        Next lIndex1
        
        'Laço para determinar os dois números que satisfazem a Conjectura de Goldbach:
        lEsq = 1
        lDir = lPrimos
        Do
            Select Case alPrimos(lEsq) + alPrimos(lDir)
                Case lNúmero
                    ReDim Temp(1 To 2)
                    Temp(1) = alPrimos(lEsq)
                    Temp(2) = alPrimos(lDir)
                    Exit Do
                Case Is < lNúmero
                    lEsq = lEsq + 1
                Case Else
                    lDir = lDir - 1
            End Select
        Loop While lEsq < lDir
        
    Fim:
        Goldbach = Temp
    End Function


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 29 de novembro de 2012 22:26
    Moderador