Given a positive integer, check if the number is prime or not. A prime is a natural number greater than 1 that has no positive divisors other than 1 and itself. Examples of first few prime numbers are {2, 3, 5,

Examples :

Input: n = 11 Output: true Input: n = 15 Output: false Input: n = 1 Output: false

** School Method **

A simple solution is to iterate through all numbers from 2 to n-1 and for every number check if it divides n. If we find any number that divides, we return false.

`// A school method based JAVA program ` `// to check if a number is prime ` `class` `GFG { ` ` ` ` ` `static` `boolean` `isPrime(` `int` `n) ` ` ` `{ ` ` ` `// Corner case ` ` ` `if` `(n <= ` `1` `) ` ` ` `return` `false` `; ` ` ` ` ` `// Check from 2 to n-1 ` ` ` `for` `(` `int` `i = ` `2` `; i < n; i++) ` ` ` `if` `(n % i == ` `0` `) ` ` ` `return` `false` `; ` ` ` ` ` `return` `true` `; ` ` ` `} ` ` ` ` ` `// Driver Program ` ` ` `public` `static` `void` `main(String args[]) ` ` ` `{ ` ` ` `if` `(isPrime(` `11` `)) ` ` ` `System.out.println(` `" true"` `); ` ` ` `else` ` ` `System.out.println(` `" false"` `); ` ` ` `if` `(isPrime(` `15` `)) ` ` ` `System.out.println(` `" true"` `); ` ` ` `else` ` ` `System.out.println(` `" false"` `); ` ` ` `} ` `} ` |

**Output:**

true false

Time complexity of this solution is O(n)

** Optimized School Method **

We can do following optimizations:

- Instead of checking till n, we can check till √n because a larger factor of n must be a multiple of smaller factor that has been already checked.
- The algorithm can be improved further by observing that all primes are of the form 6k ± 1, with the exception of 2 and 3. This is because all integers can be expressed as (6k + i) for some integer k and for i = ?1, 0, 1, 2, 3, or 4; 2 divides (6k + 0), (6k + 2), (6k + 4); and 3 divides (6k + 3). So a more efficient method is to test if n is divisible by 2 or 3, then to check through all the numbers of form 6k ± 1. (Source: wikipedia)

`// A optimized school method based Java ` `// program to check if a number is prime ` `import` `java.io.*; ` ` ` `class` `GFG { ` ` ` ` ` `static` `boolean` `isPrime(` `int` `n) ` ` ` `{ ` ` ` `// Corner cases ` ` ` `if` `(n <= ` `1` `) ` ` ` `return` `false` `; ` ` ` `if` `(n <= ` `3` `) ` ` ` `return` `true` `; ` ` ` ` ` `// This is checked so that we can skip ` ` ` `// middle five numbers in below loop ` ` ` `if` `(n % ` `2` `== ` `0` `|| n % ` `3` `== ` `0` `) ` ` ` `return` `false` `; ` ` ` ` ` `for` `(` `int` `i = ` `5` `; i * i <= n; i = i + ` `6` `) ` ` ` `if` `(n % i == ` `0` `|| n % (i + ` `2` `) == ` `0` `) ` ` ` `return` `false` `; ` ` ` ` ` `return` `true` `; ` ` ` `} ` ` ` ` ` `// Driver Program ` ` ` `public` `static` `void` `main(String args[]) ` ` ` `{ ` ` ` `if` `(isPrime(` `11` `)) ` ` ` `System.out.println(` `" true"` `); ` ` ` `else` ` ` `System.out.println(` `" false"` `); ` ` ` `if` `(isPrime(` `15` `)) ` ` ` `System.out.println(` `" true"` `); ` ` ` `else` ` ` `System.out.println(` `" false"` `); ` ` ` `} ` `} ` |

**Output:**

true false

Time complexity of this solution is O(√n)

Main Article : Primality Test | Set 1 (Introduction and School Method)

**References:**

https://en.wikipedia.org/wiki/Prime_number

http://www.cse.iitk.ac.in/users/manindra/presentations/FLTBasedTests.pdf

https://en.wikipedia.org/wiki/Primality_test

This article is contributed by **Ajay**. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above