D Numbers
Last Updated :
23 Mar, 2021
D Number is a number N > 3 such that N divides k^(n-2)-k for all k with gcd(k, n) = 1, 1<k<n.
9, 15, 21, 33, 39, 51, 57, 63, 69, 87, 93….
Check if a number is a D-Number
Given a number N, the task is to check if N is an D Number or not. If N is an D Number then print “Yes” else print “No”.
Examples:
Input: N = 9
Output: Yes
Explanation:
9 is a D-number since it divides all the numbers
2^7-2, 4^7-4, 5^7-5, 7^7-7 and 8^7-8, and
2, 4, 5, 7, 8 are relatively prime to n.
Input: N = 16
Output: No
Approach: Since D Number is a number N > 3 such that N divides k^(n-2)-k for all k with gcd(k, n) = 1, 1<k<n. So in a loop of k from 2 to n-1, we will check if gcd of N and k is 1 or not.If it’s 1 then we will check if k^(n-2)-k is divisible by N or not.If not divisible we will return false.At last we will return true.
Below is the implementation of the above approach:
C++
#include<bits/stdc++.h>
using namespace std;
int isDNum( int n)
{
if (n < 4)
return false ;
int numerator, hcf;
for ( int k = 2; k <= n; k++)
{
numerator = pow (k, n - 2) - k;
hcf = __gcd(n, k);
}
if (hcf == 1 && (numerator % n) != 0)
return false ;
return true ;
}
int main()
{
int n = 15;
int a = isDNum(n);
if (a)
cout << "Yes" ;
else
cout << "No" ;
}
|
Java
import java.util.*;
class GFG{
static boolean isDNum( int n)
{
if (n < 4 )
return false ;
int numerator = 0 , hcf = 0 ;
for ( int k = 2 ; k <= n; k++)
{
numerator = ( int )(Math.pow(k, n - 2 ) - k);
hcf = __gcd(n, k);
}
if (hcf == 1 && (numerator % n) != 0 )
return false ;
return true ;
}
static int __gcd( int a, int b)
{
return b == 0 ? a : __gcd(b, a % b);
}
public static void main(String[] args)
{
int n = 15 ;
boolean a = isDNum(n);
if (a)
System.out.print( "Yes" );
else
System.out.print( "No" );
}
}
|
Python3
import math
def isDNum(n):
if n < 4 :
return False
for k in range ( 2 , n):
numerator = pow (k, n - 2 ) - k
hcf = math.gcd(n, k)
if (hcf = = 1 and (numerator % n) ! = 0 ):
return False
return True
n = 15
if isDNum(n):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG{
static bool isDNum( int n)
{
if (n < 4)
return false ;
int numerator = 0, hcf = 0;
for ( int k = 2; k <= n; k++)
{
numerator = ( int )(Math.Pow(k, n - 2) - k);
hcf = __gcd(n, k);
}
if (hcf == 1 && (numerator % n) != 0)
return false ;
return true ;
}
static int __gcd( int a, int b)
{
return b == 0 ? a : __gcd(b, a % b);
}
public static void Main(String[] args)
{
int n = 15;
bool a = isDNum(n);
if (a)
Console.Write( "Yes" );
else
Console.Write( "No" );
}
}
|
Javascript
<script>
function isDNum( n) {
if (n < 4)
return false ;
let numerator = 0, hcf = 0;
for ( k = 2; k <= n; k++) {
numerator = parseInt( (Math.pow(k, n - 2) - k));
hcf = __gcd(n, k);
}
if (hcf == 1 && (numerator % n) != 0)
return false ;
return true ;
}
function __gcd( a, b) {
return b == 0 ? a : __gcd(b, a % b);
}
let n = 15;
let a = isDNum(n);
if (a)
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time Complexity: O(1)
Reference: OEIS
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...