Giuga Numbers
Last Updated :
07 Jul, 2021
Given a number N, the task is to check if N is an Giuga Number or not. If N is an Giuga Number then print “Yes” else print “No”.
A Giuga Number is a composite number N such that p divides (N/p – 1) for every prime factor p of N.
Examples:
Input: N = 30
Output: Yes
Explanation:
30 is a composite number whose prime divisors are {2, 3, 5}, such that
2 divides 30/2 – 1 = 14,
3 divides 30/3 – 1 = 9, and
5 divides 30/5 – 1 = 5.
Input: N = 161
Output: No
Approach: The idea is to check if N is composite number or not. If not then print “No”.
If N is a composite number then find the prime factors of a number and for each prime factor p check if the condition p divides (n/p – 1) holds true or not. If the above condition holds true then print “Yes” else print “No”.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool isComposite( int n)
{
if (n <= 1)
return false ;
if (n <= 3)
return false ;
if (n % 2 == 0 || n % 3 == 0)
return true ;
for ( int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return true ;
return false ;
}
bool isGiugaNum( int n)
{
if (!(isComposite(n)))
return false ;
int N = n;
while (n % 2 == 0) {
if ((N / 2 - 1) % 2 != 0)
return false ;
n = n / 2;
}
for ( int i = 3; i <= sqrt (n);
i = i + 2) {
while (n % i == 0) {
if ((N / i - 1) % i != 0)
return false ;
n = n / i;
}
}
if (n > 2)
if ((N / n - 1) % n != 0)
return false ;
return true ;
}
int main()
{
int N = 30;
if (isGiugaNum(N))
cout << "Yes" ;
else
cout << "No" ;
}
|
Java
class GFG{
static boolean isComposite( int n)
{
if (n <= 1 )
return false ;
if (n <= 3 )
return false ;
if (n % 2 == 0 || n % 3 == 0 )
return true ;
for ( int i = 5 ; i * i <= n; i = i + 6 )
if (n % i == 0 || n % (i + 2 ) == 0 )
return true ;
return false ;
}
static boolean isGiugaNum( int n)
{
if (!(isComposite(n)))
return false ;
int N = n;
while (n % 2 == 0 )
{
if ((N / 2 - 1 ) % 2 != 0 )
return false ;
n = n / 2 ;
}
for ( int i = 3 ; i <= Math.sqrt(n);
i = i + 2 )
{
while (n % i == 0 )
{
if ((N / i - 1 ) % i != 0 )
return false ;
n = n / i;
}
}
if (n > 2 )
if ((N / n - 1 ) % n != 0 )
return false ;
return true ;
}
public static void main(String[] args)
{
int n = 30 ;
if (isGiugaNum(n))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
import math
def isComposite(n):
if (n < = 1 ):
return False
if (n < = 3 ):
return False
if (n % 2 = = 0 or n % 3 = = 0 ):
return True
i = 5
while (i * i < = n):
if (n % i = = 0 or n % (i + 2 ) = = 0 ):
return True
i + = 6
return False
def isGiugaNum(n):
if ( not (isComposite(n))):
return False
N = n
while (n % 2 = = 0 ):
if (( int (N / 2 ) - 1 ) % 2 ! = 0 ):
return False
n = int (n / 2 )
for i in range ( 3 , int (math.sqrt(n)) + 1 , 2 ):
while (n % i = = 0 ):
if (( int (N / i) - 1 ) % i ! = 0 ):
return False
n = int (n / i)
if (n > 2 ):
if (( int (N / n) - 1 ) % n ! = 0 ):
return False
return True
n = 30
if (isGiugaNum(n)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG{
static bool isComposite( int n)
{
if (n <= 1)
return false ;
if (n <= 3)
return false ;
if (n % 2 == 0 || n % 3 == 0)
return true ;
for ( int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return true ;
return false ;
}
static bool isGiugaNum( int n)
{
if (!(isComposite(n)))
return false ;
int N = n;
while (n % 2 == 0)
{
if ((N / 2 - 1) % 2 != 0)
return false ;
n = n / 2;
}
for ( int i = 3; i <= Math.Sqrt(n);
i = i + 2)
{
while (n % i == 0)
{
if ((N / i - 1) % i != 0)
return false ;
n = n / i;
}
}
if (n > 2)
if ((N / n - 1) % n != 0)
return false ;
return true ;
}
static void Main()
{
int N = 30;
if (isGiugaNum(N))
Console.Write( "Yes" );
else
Console.Write( "No" );
}
}
|
Javascript
<script>
function isComposite(n)
{
if (n <= 1)
return false ;
if (n <= 3)
return false ;
if (n % 2 == 0 || n % 3 == 0)
return true ;
for (let i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return true ;
return false ;
}
function isGiugaNum(n)
{
if (!(isComposite(n)))
return false ;
let N = n;
while (n % 2 == 0)
{
if ((N / 2 - 1) % 2 != 0)
return false ;
n = n / 2;
}
for (let i = 3;
i <= Math.sqrt(n);
i = i + 2)
{
while (n % i == 0)
{
if ((N / i - 1) % i != 0)
return false ;
n = n / i;
}
}
if (n > 2)
if ((N / n - 1) % n != 0)
return false ;
return true ;
}
let n = 30;
if (isGiugaNum(n))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Share your thoughts in the comments
Please Login to comment...