# Check if a number is Fermat Pseudoprime

Last Updated : 07 Jun, 2022

Given a number N and a base number A. The task is to check whether the number is a Fermat Pseudoprime to the base.
The number N is called as Fermat Pseudoprime to the base A, if

1. A > 1
2. N is a composite number
3. N divides AN-1 – 1.

Examples:

Input : N = 645, a = 2
Output :
645 = 3*5*43, Hence it is a composite number
Also 645 divides 2^(644)-1
Hence it is a Fermat Pseudoprime.
Input : N = 6, a = 2
Output :

Approach: The approach is to check the below conditions:

If all of the above conditions satisfy then N is a fermat pseudoprime to base A.
Below is the implementation of the above approach:

## C++

 `// C++ program to check if N is Fermat pseudoprime` `// to the base A or not` `#include ` `using` `namespace` `std;`   `// Function to check if the given number is composite` `bool` `checkcomposite(``int` `n)` `{` `    ``// Check if there is any divisor of n less than sqrt(n)` `    ``for` `(``int` `i = 2; i <= ``sqrt``(n); i++) {` `        ``if` `(n % i == 0)` `            ``return` `1;` `    ``}` `    ``return` `0;` `}`   `// Effectively calculate (x^y) modulo mod` `int` `power(``int` `x, ``int` `y, ``int` `mod)` `{`   `    ``// Initialize result` `    ``int` `res = 1;`   `    ``while` `(y) {`   `        ``// If power is odd, then update the answer` `        ``if` `(y & 1)` `            ``res = (res * x) % mod;`   `        ``// Square the number and reduce` `        ``// the power to its half` `        ``y = y >> 1;` `        ``x = (x * x) % mod;` `    ``}`   `    ``// Return the result` `    ``return` `res;` `}`   `// Function to check for Fermat Pseudoprime` `bool` `Check(``int` `n, ``int` `a)` `{`   `    ``// If it is composite and satisfy Fermat criterion` `    ``if` `(a>1 && checkcomposite(n) && power(a, n - 1, n) == 1)` `        ``return` `1;`   `    ``// Else return 0` `    ``return` `0;` `}`   `// Driver code` `int` `main()` `{`   `    ``int` `N = 645;` `    ``int` `a = 2;` `    `  `   ``//  Function call` `    ``cout << Check(N, a);`   `    ``return` `0;` `}`

## Java

 `// Java program to check if N is Fermat pseudoprime ` `// to the base A or not ` `class` `GFG ` `{`   `    ``// Function to check if ` `    ``// the given number is composite ` `    ``static` `boolean` `checkcomposite(``int` `n) ` `    ``{` `        ``// Check if there is any divisor of n ` `        ``// less than sqrt(n) ` `        ``for` `(``int` `i = ``2``; i <= Math.sqrt(n); i++) ` `        ``{` `            ``if` `(n % i == ``0``) ` `            ``{` `                ``return` `true``;` `            ``}` `        ``}` `        ``return` `false``;` `    ``}`   `    ``// Effectively calculate (x^y) modulo mod ` `    ``static` `int` `power(``int` `x, ``int` `y, ``int` `mod)` `    ``{`   `        ``// Initialize result ` `        ``int` `res = ``1``;`   `        ``while` `(y != ``0``) ` `        ``{`   `            ``// If power is odd,` `            ``// then update the answer ` `            ``if` `((y & ``1``) == ``1``) ` `            ``{` `                ``res = (res * x) % mod;` `            ``}`   `            ``// Square the number and reduce ` `            ``// the power to its half ` `            ``y = y >> ``1``;` `            ``x = (x * x) % mod;` `        ``}`   `        ``// Return the result ` `        ``return` `res;` `    ``}`   `    ``// Function to check for Fermat Pseudoprime ` `    ``static` `int` `Check(``int` `n, ``int` `a) ` `    ``{`   `        ``// If it is composite and ` `        ``// satisfy Fermat criterion ` `        ``if` `(a > ``1` `&& checkcomposite(n)` `                ``&& power(a, n - ``1``, n) == ``1``) ` `        ``{` `            ``return` `1``;` `        ``}`   `        ``// Else return 0 ` `        ``return` `0``;` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `N = ``645``;` `        ``int` `a = ``2``;`   `        ``// Function call ` `        ``System.out.println(Check(N, a));` `    ``}` `}`   `// This code is contributed by 29AjayKumar`

## Python3

 `# Python3 program to check if N is Fermat pseudoprime` `# to the base A or not`   `from` `math ``import` `sqrt`   `# Function to check if the given number is composite` `def` `checkcomposite(n):` `    `  `    ``# Check if there is any divisor of n less than sqrt(n)` `    ``for` `i ``in` `range``(``2``,``int``(sqrt(n))``+``1``,``1``):` `        ``if` `(n ``%` `i ``=``=` `0``):` `            ``return` `1` `    ``return` `0`   `# Effectively calculate (x^y) modulo mod` `def` `power(x, y, mod):` `    ``# Initialize result` `    ``res ``=` `1`   `    ``while` `(y):` `        ``# If power is odd, then update the answer` `        ``if` `(y & ``1``):` `            ``res ``=` `(res ``*` `x) ``%` `mod`   `        ``# Square the number and reduce` `        ``# the power to its half` `        ``y ``=` `y >> ``1` `        ``x ``=` `(x ``*` `x) ``%` `mod`   `    ``# Return the result` `    ``return` `res`   `# Function to check for Fermat Pseudoprime` `def` `Check(n,a):` `    ``# If it is composite and satisfy Fermat criterion` `    ``if` `(a>``1` `and` `checkcomposite(n) ``and` `power(a, n ``-` `1``, n) ``=``=` `1``):` `        ``return` `1`   `    ``# Else return 0` `    ``return` `0`   `# Driver code` `if` `__name__ ``=``=` `'__main__'``:` `    ``N ``=` `645` `    ``a ``=` `2`   `    ``# Function call` `    ``print``(Check(N, a))`   `# This code is contributed by` `# Surendra_Gangwar`

## C#

 `// C# program to check if N is Fermat pseudoprime ` `// to the base A or not ` `using` `System;`   `class` `GFG` `{` `    `  `    ``// Function to check if ` `    ``// the given number is composite ` `    ``static` `bool` `checkcomposite(``int` `n) ` `    ``{ ` `        ``// Check if there is any divisor of n ` `        ``// less than sqrt(n) ` `        ``for` `(``int` `i = 2; i <= Math.Sqrt(n); i++) ` `        ``{ ` `            ``if` `(n % i == 0) ` `                ``return` `true``; ` `        ``} ` `        ``return` `false``; ` `    ``} ` `    `  `    ``// Effectively calculate (x^y) modulo mod ` `    ``static` `int` `power(``int` `x, ``int` `y, ``int` `mod) ` `    ``{ ` `    `  `        ``// Initialize result ` `        ``int` `res = 1; ` `    `  `        ``while` `(y != 0) ` `        ``{ ` `    `  `            ``// If power is odd, then update the answer ` `            ``if` `((y & 1) == 1) ` `                ``res = (res * x) % mod; ` `    `  `            ``// Square the number and reduce ` `            ``// the power to its half ` `            ``y = y >> 1; ` `            ``x = (x * x) % mod; ` `        ``} ` `    `  `        ``// Return the result ` `        ``return` `res; ` `    ``} ` `    `  `    ``// Function to check for Fermat Pseudoprime ` `    ``static` `int` `Check(``int` `n, ``int` `a) ` `    ``{ ` `    `  `        ``// If it is composite and satisfy Fermat criterion ` `        ``if` `(a > 1 && checkcomposite(n) && ` `                     ``power(a, n - 1, n) == 1) ` `            ``return` `1; ` `    `  `        ``// Else return 0 ` `        ``return` `0; ` `    ``} ` `    `  `    ``// Driver code ` `    ``static` `public` `void` `Main ()` `    ``{` `        ``int` `N = 645; ` `        ``int` `a = 2; ` `    `  `        ``// Function call ` `        ``Console.WriteLine(Check(N, a)); ` `    ``}` `}`   `// This code is contributed by AnkitRai01`

## Javascript

 ``

Output:

`1`

Time Complexity : O(sqrt(N))

Auxiliary Space: O(1)