F90: Conjectura de Goldbach (sem crivo)

From AdonaiMedrado.Pro.Br
Jump to: navigation, search

Este código foi desenvolvido pelo aluno Paulo Raimundo durante a disciplina Processamento de Dados (UFBA 2008.2). Data da apresentação: 25/11/2008.

Para conhecer sobre a Conjectura de Golbach visite: http://pt.wikipedia.org/wiki/Conjectura_de_Goldbach.

PROGRAM Goldbach
     INTEGER :: A, B, C, D, E
     WRITE (*,*) "Digite até quanto deseja testar?"
     READ (*,*) E
     DO A=4,E,2
          B=1
          C=A-1
          D=C
          DO
               B=B+1
               D=D-1
               IF (primoteste(B) .AND. primoteste(D)) THEN
                    WRITE (*,*) A, "=", B,"+", D
                    IF (A==E) PAUSE "Terminou o cálculo!"
                    EXIT
               END IF
               IF (B==C) THEN
                    WRITE (*,*) "Parabéns, foi encontrado um contra-exemplo e a conjectura é falsa!"
                    PAUSE
               END IF  
          END DO
     END DO
CONTAINS
     LOGICAL FUNCTION primoteste(x)
          INTEGER, INTENT(IN) :: x
          INTEGER(8) :: B, C, D, E
          E=x
          B=x-1
          DO C=2, B
               D=C
               IF (D==B) THEN
                    primoteste=.TRUE.
                    EXIT
               END IF
               IF (MOD(E,D)>0) CYCLE
               primoteste=.FALSE.
               EXIT
          END DO
     END FUNCTION primoteste
END PROGRAM Goldbach