# Carmichael Numbers

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: Please solve it on “PRACTICE ” first, before moving on to the solution.

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. `

## Python

 `# 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

 ` `

Output :

```0
1
1
```

This article is contributed by Ashutosh Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.