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

```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 <iostream>
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<n :

# 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
b = b + 1
return 1

# Driver function
print isCarmichaelNumber(500)
print isCarmichaelNumber(561)
print isCarmichaelNumber(1105)

#This code is contributed by Nikita Tiwari.
```

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.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
2.5 Average Difficulty : 2.5/5.0
Based on 2 vote(s)