Open in App
Not now

# Introduction to Primality Test and School Method

• Difficulty Level : Easy
• Last Updated : 11 Jan, 2023

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 the first few prime numbers are {2, 3, 5, …}
Examples :

Input:  n = 11
Output: true

Input:  n = 15
Output: false

Input:  n = 1
Output: false

Recommended Practice

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.

Below is the implementation of this method.

## C++

 `// A school method based C++ program to check if a ` `// number is prime ` `#include ` `using` `namespace` `std; ` ` `  `bool` `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 to test above function ` `int` `main() ` `{ ` `    ``isPrime(11) ? cout << ``" true\n"` `: cout << ``" false\n"``; ` `    ``isPrime(15) ? cout << ``" true\n"` `: cout << ``" false\n"``; ` `    ``return` `0; ` `}`

## Java

 `// 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"``); ` `    ``} ` `} ` ` `  `// This code is contributed ` `// by Nikita Tiwari.`

## Python3

 `# A school method based Python3 ` `# program to check if a number ` `# is prime ` ` `  ` `  `def` `isPrime(n): ` ` `  `    ``# Corner case ` `    ``if` `n <``=` `1``: ` `        ``return` `False` ` `  `    ``# Check from 2 to n-1 ` `    ``for` `i ``in` `range``(``2``, n): ` `        ``if` `n ``%` `i ``=``=` `0``: ` `            ``return` `False` ` `  `    ``return` `True` ` `  ` `  `# Driver Program to test above function ` `print``(``"true"``) ``if` `isPrime(``11``) ``else` `print``(``"false"``) ` `print``(``"true"``) ``if` `isPrime(``14``) ``else` `print``(``"false"``) ` ` `  `# This code is contributed by Smitha Dinesh Semwal `

## C#

 `// A optimized school method based C# ` `// program to check if a number is prime ` `using` `System; ` ` `  `namespace` `prime { ` `public` `class` `GFG { ` `    ``public` `static` `bool` `isprime(``int` `n) ` `    ``{ ` `        ``// Corner cases ` `        ``if` `(n <= 1) ` `            ``return` `false``; ` ` `  `        ``for` `(``int` `i = 2; i < n; i++) ` `            ``if` `(n % i == 0) ` `                ``return` `false``; ` ` `  `        ``return` `true``; ` `    ``} ` ` `  `    ``// Driver program ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``if` `(isprime(11)) ` `            ``Console.WriteLine(``"true"``); ` `        ``else` `            ``Console.WriteLine(``"false"``); ` ` `  `        ``if` `(isprime(15)) ` `            ``Console.WriteLine(``"true"``); ` `        ``else` `            ``Console.WriteLine(``"false"``); ` `    ``} ` `} ` `} ` ` `  `// This code is contributed by Sam007`

## PHP

 ``

## Javascript

 ``

Output

``` true
false```

Time complexity: O(n)
Auxiliary Space: O(1)

Optimized School Method: We can do the following optimizations: Instead of checking till n, we can check till √n because a larger factor of n must be a multiple of a smaller factor that has been already checked. The implementation of this method is as follows:

## C++

 `// Optimised school method based C++ program to check if a ` `// number is prime ` `#include ` `using` `namespace` `std; ` ` `  `bool` `isPrime(``int` `n) ` `{ ` `    ``// Corner case ` `    ``if` `(n <= 1) ` `        ``return` `false``; ` ` `  `    ``// Check from 2 to square root of n ` `    ``for` `(``int` `i = 2; i <= ``sqrt``(n); i++) ` `        ``if` `(n % i == 0) ` `            ``return` `false``; ` ` `  `    ``return` `true``; ` `} ` ` `  `// Driver Program to test above function ` `int` `main() ` `{ ` `    ``isPrime(11) ? cout << ``" true\n"` `: cout << ``" false\n"``; ` `    ``isPrime(15) ? cout << ``" true\n"` `: cout << ``" false\n"``; ` `    ``return` `0; ` `} ` ` `  `// This code is contributed by Vikash Sangai`

## Java

 `// Optimised 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 square root of n ` `        ``for` `(``int` `i = ``2``; i * 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"``); ` `    ``} ` `} ` ` `  `// This code is contributed by Vikash Sangai`

## Python3

 `# Optimised school method based PYTHON program ` `# to check if a number is prime ` `# import the math module ` `import` `math ` ` `  `# function to check whether the number is prime or not ` ` `  ` `  `def` `isPrime(n): ` ` `  `    ``# Corner case ` `    ``if` `(n <``=` `1``): ` `        ``return` `False` ` `  `    ``# Check from 2 to square root of n ` `    ``for` `i ``in` `range``(``2``, ``int``(math.sqrt(n)) ``+` `1``): ` `        ``if` `(n ``%` `i ``=``=` `0``): ` `            ``return` `False` `    ``return` `True` ` `  ` `  `# Driver Program to test above function ` `print``(``"true"``) ``if` `isPrime(``11``) ``else` `print``(``"false"``) ` `print``(``"true"``) ``if` `isPrime(``15``) ``else` `print``(``"false"``) ` ` `  `# This code is contributed by bhoomikavemula `

## C#

 `// Optimised school method based C# ` `// program to check if a number is prime ` `using` `System; ` ` `  `namespace` `prime { ` `public` `class` `GFG { ` `    ``public` `static` `bool` `isprime(``int` `n) ` `    ``{ ` `        ``// Corner cases ` `        ``if` `(n <= 1) ` `            ``return` `false``; ` ` `  `        ``for` `(``int` `i = 2; i * i <= n; i++) ` `            ``if` `(n % i == 0) ` `                ``return` `false``; ` ` `  `        ``return` `true``; ` `    ``} ` ` `  `    ``// Driver program ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``if` `(isprime(11)) ` `            ``Console.WriteLine(``"true"``); ` `        ``else` `            ``Console.WriteLine(``"false"``); ` ` `  `        ``if` `(isprime(15)) ` `            ``Console.WriteLine(``"true"``); ` `        ``else` `            ``Console.WriteLine(``"false"``); ` `    ``} ` `} ` `} ` ` `  `// This code is contributed by Vikash Sangai`

## Javascript

 ``

Output

``` true
false```

Time Complexity: O(√n)
Auxiliary Space: O(1)

Another approach: It is based on the fact that all primes greater than 3 are of the form 6k ± 1, where k is any integer greater than 0. This is because all integers can be expressed as (6k + i), where i = −1, 0, 1, 2, 3, or 4. And note that 2 divides (6k + 0), (6k + 2), and (6k + 4) and 3 divides (6k + 3). So, a more efficient method is to test whether n is divisible by 2 or 3, then to check through all numbers of the form 6k ± 1 <= √n. This is 3 times faster than testing all numbers up to √n. (Source: wikipedia).

Below is the implementation of the above approach:

## C++

 `// C++ program to check the given number ` `// is prime or not ` `#include ` `using` `namespace` `std; ` ` `  `// Function to check if the given number ` `// is prime or not. ` `bool` `isPrime(``int` `n) ` `{ ` `    ``if` `(n == 2 || n == 3) ` `        ``return` `true``; ` ` `  `    ``if` `(n <= 1 || n % 2 == 0 || n % 3 == 0) ` `        ``return` `false``; ` ` `  `    ``// To check through all numbers of the form 6k ± 1 ` `    ``for` `(``int` `i = 5; i * i <= n; i += 6) { ` `        ``if` `(n % i == 0 || n % (i + 2) == 0) ` `            ``return` `false``; ` `    ``} ` ` `  `    ``return` `true``; ` `} ` ` `  `// Driver Code ` ` `  `int` `main() ` `{ ` `    ``isPrime(11) ? cout << ``" true\n"` `: cout << ``" false\n"``; ` `    ``isPrime(15) ? cout << ``" true\n"` `: cout << ``" false\n"``; ` `    ``return` `0; ` `}`

## Java

 `// JAVA program to check the given number ` `// is prime or not ` `class` `GFG { ` ` `  `  ``static` `boolean` `isPrime(``int` `n) ` `  ``{ ` `    ``// since 2 and 3 are prime ` `    ``if` `(n == ``2` `|| n == ``3``) ` `      ``return` `true``; ` ` `  `    ``// if n<=1 or divided by 2 or 3 then it can not be prime ` `    ``if` `(n <= ``1` `|| n % ``2` `== ``0` `|| n % ``3` `== ``0``) ` `      ``return` `false``; ` ` `  `    ``// To check through all numbers of the form 6k ± 1 ` `    ``for` `(``int` `i = ``5``; i * i <= n; 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"``); ` `  ``} ` `} ` ` `  `// This code is contributed by Ujjwal Kumar Bhardwaj`

## Python3

 `# Python program to check the given number ` `# is prime or not ` ` `  `# Function to check if the given number ` `# is prime or not. ` `import` `math ` ` `  `def` `isPrime(n): ` `    ``if` `n ``=``=` `2` `or` `n ``=``=` `3``: ` `        ``return` `True` `    ``elif` `n <``=` `1` `or` `n ``%` `2` `=``=` `0` `or` `n ``%` `3` `=``=` `0``: ` `        ``return` `False` `       `  `        ``# To check through all numbers of the form 6k ± 1 ` `    ``# until i <= square root of n, with step value 6 ` `    ``for` `i ``in` `range``(``5``, ``int``(math.sqrt(n))``+``1``, ``6``): ` `        ``if` `n ``%` `i ``=``=` `0` `or` `n ``%` `(i``+``2``) ``=``=` `0``: ` `            ``return` `False` ` `  `    ``return` `True` ` `  `# # Driver code ` `print``(isPrime(``11``)) ` `print``(isPrime(``20``)) ` ` `  `# # This code is contributed by Harsh Master`

## C#

 `// C# program to check the given number ` `// is prime or not ` `using` `System; ` `class` `GFG { ` ` `  `static` `bool` `isPrime(``int` `n) ` `{ ` `    ``// since 2 and 3 are prime ` `    ``if` `(n == 2 || n == 3) ` `    ``return` `true``; ` ` `  `    ``// if n<=1 or divided by 2 or 3 then it can not be prime ` `    ``if` `(n <= 1 || n % 2 == 0 || n % 3 == 0) ` `    ``return` `false``; ` ` `  `    ``// To check through all numbers of the form 6k ± 1 ` `    ``for` `(``int` `i = 5; i * i <= n; 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)) ` `    ``Console.WriteLine(``" true"``); ` `    ``else` `    ``Console.WriteLine(``" false"``); ` `    ``if` `(isPrime(15)) ` `    ``Console.WriteLine(``" true"``); ` `    ``else` `    ``Console.WriteLine(``" false"``); ` `} ` `} ` ` `  ` `  `// This code is contributed by Aman Kumar `

## Javascript

 ``

Output

``` true
false```

Time Complexity: O(√n)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Related Articles