Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Check if N is a Factorial Prime

  • Last Updated : 07 May, 2021

Given a positive integer N, the task is to check if N is a Factorial prime or not. If it is a factorial prime then print YES else print NO.
Note: In mathematics, a factorial prime number is a prime number that is one less than or one more than a factorial of any number. First few factorial primes are 2, 3, 5, 7, 23, 719, 5039, ….
Examples: 
 

Input: N = 23 
Output: YES 
23 is a prime number and one less than factorial of 4 (4! = 24). 
Input: 11 
Output: NO 
11 is a prime number but can not be expressed as either n! + 1 or n! – 1. 
 

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

 



Approach: In order for N to be factorial number, N must be a prime and either N – 1 or N + 1 should be the value of factorial of any number. 
 

  • If N is not prime then print No.
  • Else set fact = 1 and starting from i = 1 update fact = fact * i, if fact = N – 1 or fact = N + 1 then print Yes.
  • Repeat the above step until fact ≤ N + 1 and if the condition is not satisfied then print No in the end.

Below is the implementation of the above approach:
 

C++




// C++ program to check if given
// number is a factorial prime
 
#include <bits/stdc++.h>
using namespace std;
 
// Utility function to check
// if a number is prime or not
bool isPrime(int n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
 
    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;
 
    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
 
    return true;
}
 
// Function that returns true if n is a factorial prime
bool isFactorialPrime(long n)
{
 
    // If n is not prime then return false
    if (!isPrime(n))
        return false;
 
    long fact = 1;
    int i = 1;
    while (fact <= n + 1) {
 
        // Calculate factorial
        fact = fact * i;
 
        // If n is a factorial prime
        if (n + 1 == fact || n - 1 == fact)
            return true;
 
        i++;
    }
 
    // n is not a factorial prime
    return false;
}
 
// Driver code
int main()
{
 
    int n = 23;
 
    if (isFactorialPrime(n))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}

Java




// Java program to check if given
// number is a factorial prime
class GFG {
 
    // Utility function to check
    // if a number is prime or not
    static boolean isPrime(long n)
    {
        // Corner cases
        if (n <= 1)
            return false;
        if (n <= 3)
            return true;
 
        // This is checked so that we can skip
        // middle five numbers in below loop
        if (n % 2 == 0 || n % 3 == 0)
            return false;
 
        for (int i = 5; i * i <= n; i = i + 6)
            if (n % i == 0 || n % (i + 2) == 0)
                return false;
 
        return true;
    }
 
    // Function that returns true if n is a factorial prime
    static boolean isFactorialPrime(long n)
    {
 
        // If n is not prime then return false
        if (!isPrime(n))
            return false;
 
        long fact = 1;
        int i = 1;
        while (fact <= n + 1) {
 
            // Calculate factorial
            fact = fact * i;
 
            // If n is a factorial prime
            if (n + 1 == fact || n - 1 == fact)
                return true;
 
            i++;
        }
 
        // n is not a factorial prime
        return false;
    }
 
    // Driver code
    public static void main(String args[])
    {
 
        int n = 23;
 
        if (isFactorialPrime(n))
            System.out.println("Yes");
 
        else
            System.out.println("No");
    }
}

Python3




# Python3 program to check if given
# number is a factorial prime
 
# from math lib import sqrt function
from math import sqrt
 
# Utility function to check
# if a number is prime or not
def isPrime(n) :
     
    # Corner cases
    if (n <= 1) :
        return False
         
    if (n <= 3) :
        return True
 
    # This is checked so that we can skip
    # middle five numbers in below loop
    if (n % 2 == 0 or n % 3 == 0) :
        return False
 
    for i in range(5, int(sqrt(n)) + 1, 6) :
        if (n % i == 0 or n % (i + 2) == 0) :
            return False
 
    return True
 
# Function that returns true if n
# is a factorial prime
def isFactorialPrime(n) :
 
    # If n is not prime then return false
    if (not isPrime(n)) :
        return False
     
    fact = 1
    i = 1
    while (fact <= n + 1) :
 
        # Calculate factorial
        fact = fact * i
 
        # If n is a factorial prime
        if (n + 1 == fact or n - 1 == fact) :
            return True
 
        i += 1
 
    # n is not a factorial prime
    return False
 
# Driver code
if __name__ == "__main__" :
 
    n = 23
 
    if (isFactorialPrime(n)) :
        print("Yes")
    else :
        print("No")
 
# This code is contributed by Ryuga

C#




// C# program to check if given
// number is a factorial prime
using System;
class GFG {
 
    // Utility function to check
    // if a number is prime or not
    static bool isPrime(long n)
    {
        // Corner cases
        if (n <= 1)
            return false;
        if (n <= 3)
            return true;
 
        // This is checked so that we can skip
        // middle five numbers in below loop
        if (n % 2 == 0 || n % 3 == 0)
            return false;
 
        for (int i = 5; i * i <= n; i = i + 6)
            if (n % i == 0 || n % (i + 2) == 0)
                return false;
 
        return true;
    }
 
    // Function that returns true if n is a factorial prime
    static bool isFactorialPrime(long n)
    {
 
        // If n is not prime then return false
        if (!isPrime(n))
            return false;
 
        long fact = 1;
        int i = 1;
        while (fact <= n + 1) {
 
            // Calculate factorial
            fact = fact * i;
 
            // If n is a factorial prime
            if (n + 1 == fact || n - 1 == fact)
                return true;
 
            i++;
        }
 
        // n is not a factorial prime
        return false;
    }
 
    // Driver code
    public static void Main()
    {
 
        int n = 23;
 
        if (isFactorialPrime(n))
            Console.WriteLine("Yes");
 
        else
            Console.WriteLine("No");
    }
}

PHP




<?php
// PHP program to check if given number
// is a factorial prime
 
// Utility function to check if a
// number is prime or not
function isPrime($n)
{
    // Corner cases
    if ($n <= 1)
        return false;
    if ($n <= 3)
        return true;
 
    // This is checked so that we can skip
    // middle five numbers in below loop
    if ($n % 2 == 0 || $n % 3 == 0)
        return false;
 
    for ($i = 5; $i * $i <= $n; $i = $i + 6)
        if ($n % $i == 0 || $n % ($i + 2) == 0)
            return false;
 
    return true;
}
 
// Function that returns true if
// n is a factorial prime
function isFactorialPrime($n)
{
 
    // If n is not prime then return false
    if (!isPrime($n))
        return false;
 
    $fact = 1;
    $i = 1;
    while ($fact <= $n + 1)
    {
 
        // Calculate factorial
        $fact = $fact * $i;
 
        // If n is a factorial prime
        if ($n + 1 == $fact || $n - 1 == $fact)
            return true;
 
        $i++;
    }
 
    // n is not a factorial prime
    return false;
}
 
// Driver code
$n = 23;
 
if (isFactorialPrime($n))
    echo "Yes";
else
    echo "No";
 
// This code is contributed by ita_c
?>

Javascript




// Javascript program to check if given number
// is a factorial prime
 
// Utility function to check if a
// number is prime or not
function isPrime(n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
 
    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;
 
    for (let i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
 
    return true;
}
 
// Function that returns true if
// n is a factorial prime
function isFactorialPrime(n)
{
 
    // If n is not prime then return false
    if (!isPrime(n))
        return false;
 
    let fact = 1;
    let i = 1;
    while (fact <= n + 1)
    {
 
        // Calculate factorial
        fact = fact * i;
 
        // If n is a factorial prime
        if (n + 1 == fact || n - 1 == fact)
            return true;
 
        i++;
    }
 
    // n is not a factorial prime
    return false;
}
 
// Driver code
let n = 23;
 
if (isFactorialPrime(n))
    document.write("Yes");
else
    document.write("No");
 
// This code is contributed by gfgking
Output: 
Yes

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :