# Carmichael Numbers

Last Updated : 08 May, 2023

A number n is said to be a Carmichael number if it satisfies the following modular arithmetic condition:

```  power(b, n-1) MOD n = 1,
for all b ranging from 1 to n such that b and
n are relatively prime, i.e, gcd(b, n) = 1 ```

Given a positive integer n, find if it is a Carmichael number. These numbers have importance in Fermat Method for primality testing.
Examples :

```Input :  n = 8
Output : false
Explanation : 8 is not a Carmichael number because 3 is
relatively prime to 8 and (38-1) % 8
= 2187 % 8 is not 1.

Input :  n = 561
Output : true```
Recommended Practice

The idea is simple, we iterate through all numbers from 1 to n and for every relatively prime number, we check if its (n-1)th power under modulo n is 1 or not.
Below is a the program to check if a given number is Carmichael or not.

## C++

 `// A C++ program to check if a number is` `// Carmichael or not.` `#include ` `using` `namespace` `std;`   `// utility function to find gcd of two numbers` `int` `gcd(``int` `a, ``int` `b)` `{` `    ``if` `(a < b)` `        ``return` `gcd(b, a);` `    ``if` `(a % b == 0)` `        ``return` `b;` `    ``return` `gcd(b, a % b);` `}`   `// utility function to find pow(x, y) under` `// given modulo mod` `int` `power(``int` `x, ``int` `y, ``int` `mod)` `{` `    ``if` `(y == 0)` `        ``return` `1;` `    ``int` `temp = power(x, y / 2, mod) % mod;` `    ``temp = (temp * temp) % mod;` `    ``if` `(y % 2 == 1)` `        ``temp = (temp * x) % mod;` `    ``return` `temp;` `}`   `// This function receives an integer n and` `// finds if it's a Carmichael number` `bool` `isCarmichaelNumber(``int` `n)` `{` `    ``for` `(``int` `b = 2; b < n; b++) {` `        ``// If "b" is relatively prime to n` `        ``if` `(gcd(b, n) == 1)`   `            ``// And pow(b, n-1)%n is not 1,` `            ``// return false.` `            ``if` `(power(b, n - 1, n) != 1)` `                ``return` `false``;` `    ``}` `    ``return` `true``;` `}`   `// Driver function` `int` `main()` `{` `    ``cout << isCarmichaelNumber(500) << endl;` `    ``cout << isCarmichaelNumber(561) << endl;` `    ``cout << isCarmichaelNumber(1105) << endl;` `    ``return` `0;` `}`

## Java

 `// JAVA program to check if a number is` `// Carmichael or not.` `import` `java.io.*;`   `class` `GFG {`   `    ``// utility function to find gcd of` `    ``// two numbers` `    ``static` `int` `gcd(``int` `a, ``int` `b)` `    ``{` `        ``if` `(a < b)` `            ``return` `gcd(b, a);` `        ``if` `(a % b == ``0``)` `            ``return` `b;` `        ``return` `gcd(b, a % b);` `    ``}`   `    ``// utility function to find pow(x, y)` `    ``// under given modulo mod` `    ``static` `int` `power(``int` `x, ``int` `y, ``int` `mod)` `    ``{` `        ``if` `(y == ``0``)` `            ``return` `1``;` `        ``int` `temp = power(x, y / ``2``, mod) % mod;` `        ``temp = (temp * temp) % mod;` `        ``if` `(y % ``2` `== ``1``)` `            ``temp = (temp * x) % mod;` `        ``return` `temp;` `    ``}`   `    ``// This function receives an integer n and` `    ``// finds if it's a Carmichael number` `    ``static` `int` `isCarmichaelNumber(``int` `n)` `    ``{` `        ``for` `(``int` `b = ``2``; b < n; b++) {` `            ``// If "b" is relatively prime to n` `            ``if` `(gcd(b, n) == ``1``)`   `                ``// And pow(b, n-1)%n is not 1,` `                ``// return false.` `                ``if` `(power(b, n - ``1``, n) != ``1``)` `                    ``return` `0``;` `        ``}` `        ``return` `1``;` `    ``}`   `    ``// Driver function` `    ``public` `static` `void` `main(String args[])` `    ``{` `        ``System.out.println(isCarmichaelNumber(``500``));` `        ``System.out.println(isCarmichaelNumber(``561``));` `        ``System.out.println(isCarmichaelNumber(``1105``));` `    ``}` `}` `// This code is contributed by Nikita Tiwari.`

## Python3

 `# A Python program to check if a number is` `# Carmichael or not.`   `# utility function to find gcd of two numbers` `def` `gcd( a, b) :` `    ``if` `(a < b) :` `        ``return` `gcd(b, a)` `    ``if` `(a ``%` `b ``=``=` `0``) :` `        ``return` `b` `    ``return` `gcd(b, a ``%` `b)`   `# utility function to find pow(x, y) under` `# given modulo mod` `def` `power(x, y, mod) :` `    ``if` `(y ``=``=` `0``) :` `        ``return` `1` `    ``temp ``=` `power(x, y ``/``/` `2``, mod) ``%` `mod` `    ``temp ``=` `(temp ``*` `temp) ``%` `mod` `    ``if` `(y ``%` `2` `=``=` `1``) :` `        ``temp ``=` `(temp ``*` `x) ``%` `mod` `    ``return` `temp`     `# This function receives an integer n and` `# finds if it's a Carmichael number` `def` `isCarmichaelNumber( n) :` `    ``b ``=` `2` `    ``while` `b

## C#

 `// C# program to check if a number is` `// Carmichael or not.` `using` `System;`   `class` `GFG {`   `    ``// utility function to find gcd of` `    ``// two numbers` `    ``static` `int` `gcd(``int` `a, ``int` `b)` `    ``{` `        ``if` `(a < b)` `            ``return` `gcd(b, a);` `        ``if` `(a % b == 0)` `            ``return` `b;` `        ``return` `gcd(b, a % b);` `    ``}`   `    ``// utility function to find pow(x, y)` `    ``// under given modulo mod` `    ``static` `int` `power(``int` `x, ``int` `y, ``int` `mod)` `    ``{` `        ``if` `(y == 0)` `            ``return` `1;`   `        ``int` `temp = power(x, y / 2, mod) % mod;` `        ``temp = (temp * temp) % mod;`   `        ``if` `(y % 2 == 1)` `            ``temp = (temp * x) % mod;`   `        ``return` `temp;` `    ``}`   `    ``// This function receives an integer n and` `    ``// finds if it's a Carmichael number` `    ``static` `int` `isCarmichaelNumber(``int` `n)` `    ``{` `        ``for` `(``int` `b = 2; b < n; b++) {` `            ``// If "b" is relatively prime to n` `            ``if` `(gcd(b, n) == 1)`   `                ``// And pow(b, n-1)%n is not 1,` `                ``// return false.` `                ``if` `(power(b, n - 1, n) != 1)` `                    ``return` `0;` `        ``}` `        ``return` `1;` `    ``}`   `    ``// Driver function` `    ``public` `static` `void` `Main()` `    ``{` `        ``Console.WriteLine(isCarmichaelNumber(500));` `        ``Console.WriteLine(isCarmichaelNumber(561));` `        ``Console.WriteLine(isCarmichaelNumber(1105));` `    ``}` `}`   `// This code is contributed by vt_m.`

## PHP

 ``

## Javascript

 ``

## C

 `// C Program to find if a number is Carmichael Number` `#include` `int` `gcd(``int` `a, ``int` `b)    ``//Function to find GCD` `{` `if` `(a

Output:

```0
1
1```

Time Complexity: O(n log n)
Auxiliary Space: O(n)

Previous
Next