F90: Conjectura de Goldbach (com 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.

Para conhecer sobre o Crivo de Eratóstenes visite: http://pt.wikipedia.org/wiki/Crivo_de_Erat%C3%B3stenes

PROGRAM GolbachComCrivo
  IMPLICIT NONE
  INTEGER:: A, B, i, C, j, D, E, k, F, H, X, Z, Y
  INTEGER, DIMENSION(:), ALLOCATABLE :: V, P
 
  WRITE (*,*) "Digite até quanto deseja calcular a soma de 2 primos"
  READ (*,*) A
  ALLOCATE(V(1:A))
  DO B=1,A
    V(B)=B
  END DO
 
  C=int(SQRT(real(A)))
 
  DO D=2,C
    IF (V(D)==-1) CYCLE
 
    DO j=2, A
      IF (D*j>A) EXIT
      V(D*j)=-1
    END DO
  END DO   
 
  k=0
  ALLOCATE(P(1:A))
  DO F=1,A
    IF (V(F)==-1.OR.V(F)==1) CYCLE
      k=k+1
      P(k)=V(F)
  END DO
 
  DO Y=4,A,2
    DO H=1,k
      Z=Y-P(H)
        IF (H==k) THEN 
          WRITE (*,*) "Parabéns, você encontrou um contra exemplo e a conjectura é falsa!"
          PAUSE
        END IF 
        DO X=k,1,-1
          IF (P(X) > Z) CYCLE
          IF (P(X)==Z) THEN
            WRITE (*,*) Y, "=", P(H), "+", Z
            IF (Y==A) PAUSE "Acabou o calculo!"
            EXIT
          END IF
          IF (P(X) < Z) EXIT
        END DO
        IF (P(X)==Z) EXIT
    END DO
  END DO
 
  DEALLOCATE(V)
  DEALLOCATE(P)
END PROGRAM GolbachComCrivo