An positive integer greater than or equal to 2 is a prime number if the only divisor of this integer is 1 and itself.
Write a program that reads in an arbitrary integer and determines if it is a prime number.
Click here to download this program.! -------------------------------------------------------------------- ! Given an integer, this program determines if it is a prime number. ! This program first makes sure the input is 2. In this case, it is ! a prime number. Then, it checks to see the input is an even ! number. If the input is odd, then this program divides the input ! with 3, 5, 7, ....., until one of two conditions is met: ! (1) if one these odd number evenly divides the input, the ! input is not a prime number; ! (2) if the divisor is greater than the square toot of the ! input, the input is a prime. ! -------------------------------------------------------------------- PROGRAM Prime IMPLICIT NONE INTEGER :: Number ! the input number INTEGER :: Divisor ! the running divisor READ(*,*) Number ! read in the input IF (Number < 2) THEN ! not a prime if < 2 WRITE(*,*) 'Illegal input' ELSE IF (Number == 2) THEN ! is a prime if = 2 WRITE(*,*) Number, ' is a prime' ELSE IF (MOD(Number,2) == 0) THEN ! not a prime if even WRITE(*,*) Number, ' is NOT a prime' ELSE ! we have an odd number here Divisor = 3 ! divisor starts with 3 DO ! divide the input number IF (Divisor*Divisor > Number .OR. MOD(Number, Divisor) == 0) EXIT Divisor = Divisor + 2 ! increase to next odd END DO IF (Divisor*Divisor > Number) THEN ! which condition fails? WRITE(*,*) Number, ' is a prime' ELSE WRITE(*,*) Number, ' is NOT a prime' END IF END IF END PROGRAM Prime
Illegal input
2 is a prime
3 is a prime
46 is NOT a prime
97 is a prime
9797 is NOT a prime
A better choice is the square root of Number? Why is this strange value? If Number is divisible by a, then we can write Number=a*b for some b. If a is less than or equal to b, then a must be smaller than or equal to the square root of Number.
Therefore, the upper limit of Divisor is the square root of Number. Stated in a slightly different way, it is "the square of Divisor is less than or equal to Number". This is better since it only uses integer arithmetic, while the one using square root involves REAL numbers.
Since Divisor can only be odd numbers, step-size is 2.
This loop continues until one of the two conditions holds. If Divisor*Divisor > Number holds, then all odd numbers that are greater than or equal to 3 and less than or equal to the square root of Number have been tried and none of them can evenly divide Number. Therefore, Number is a prime number.
If MOD(Number,Divisor) == 0 holds, Divisor divides Number and Number is not a prime.