# Check if a number is Fermat Pseudoprime

• Difficulty Level : Easy
• 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)

My Personal Notes arrow_drop_up