Related Articles

Related Articles

Check if a number is Fermat Pseudoprime
  • Difficulty Level : Easy
  • Last Updated : 27 Aug, 2020

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 :1
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 :0



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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to check if N is Fermat pseudoprime
// to the base A or not
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Output:

1

Time Complexity : O(sqrt(N))

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up
Recommended Articles
Page :