Check if count of even divisors of N is equal to count of odd divisors
Last Updated :
22 Mar, 2021
Given a positive integer N, the task is to check whether the count of even divisors and odd divisors of N are equal or not. If they are same then print “YES” else print “NO”.
Examples :
Input: N = 6
Output: YES
Explanation:
Number 6 has four factors:
1, 2, 3, 6,
count of even divisors = 2 (2 and 6)
count of odd divisors = 2 (1 and 3)
Input: N = 9
Output: NO
Explanation:
count of even divisors = 0
count of odd divisors = 3 (1, 3 and 9)
Naive Approach: The naive approach is to find all the divisors of the given number and count the even divisors and odd divisors and check whether they are equal or not. If they are same then print “YES”, else print “NO”.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool divisorsSame( int n)
{
int even_div = 0, odd_div = 0;
for ( int i = 1; i <= sqrt (n); i++) {
if (n % i == 0) {
if (n / i == i) {
if (i % 2 == 0) {
even_div++;
}
else {
odd_div++;
}
}
else {
if (i % 2 == 0) {
even_div++;
}
else {
odd_div++;
}
if (n / i % 2 == 0) {
even_div++;
}
else {
odd_div++;
}
}
}
}
return (even_div == odd_div);
}
int main()
{
int N = 6;
if (divisorsSame(N)) {
cout << "Yes" ;
}
else {
cout << "No" ;
}
return 0;
}
|
Java
import java.util.*;
class GFG{
static boolean divisorsSame( int n)
{
int even_div = 0 , odd_div = 0 ;
for ( int i = 1 ; i <= Math.sqrt(n); i++)
{
if (n % i == 0 )
{
if (n / i == i)
{
if (i % 2 == 0 )
{
even_div++;
}
else
{
odd_div++;
}
}
else
{
if (i % 2 == 0 )
{
even_div++;
}
else
{
odd_div++;
}
if (n / i % 2 == 0 )
{
even_div++;
}
else
{
odd_div++;
}
}
}
}
return (even_div == odd_div);
}
public static void main(String[] args)
{
int N = 6 ;
if (divisorsSame(N))
{
System.out.println( "Yes" );
}
else
{
System.out.println( "No" );
}
}
}
|
Python3
import math
def divisorsSame(n):
even_div = 0 ; odd_div = 0 ;
for i in range ( 1 , int (math.sqrt(n))):
if (n % i = = 0 ):
if (n / / i = = i):
if (i % 2 = = 0 ):
even_div + = 1 ;
else :
odd_div + = 1 ;
else :
if (i % 2 = = 0 ):
even_div + = 1 ;
else :
odd_div + = 1 ;
if (n / / (i % 2 ) = = 0 ):
even_div + = 1 ;
else :
odd_div + = 1 ;
return (even_div = = odd_div);
N = 6 ;
if (divisorsSame(N) = = 0 ):
print ( "Yes" );
else :
print ( "No" );
|
C#
using System;
class GFG{
static bool divisorsSame( int n)
{
int even_div = 0, odd_div = 0;
for ( int i = 1; i <= Math.Sqrt(n); i++)
{
if (n % i == 0)
{
if (n / i == i)
{
if (i % 2 == 0)
{
even_div++;
}
else
{
odd_div++;
}
}
else
{
if (i % 2 == 0)
{
even_div++;
}
else
{
odd_div++;
}
if (n / i % 2 == 0)
{
even_div++;
}
else
{
odd_div++;
}
}
}
}
return (even_div == odd_div);
}
public static void Main()
{
int N = 6;
if (divisorsSame(N))
{
Console.Write( "Yes" );
}
else
{
Console.Write( "No" );
}
}
}
|
Javascript
<script>
function divisorsSame(n)
{
let even_div = 0, odd_div = 0;
for (let i = 1; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
if (Math.floor(n / i) == i) {
if (i % 2 == 0) {
even_div++;
}
else {
odd_div++;
}
}
else {
if (i % 2 == 0) {
even_div++;
}
else {
odd_div++;
}
if (Math.floor(n / i) % 2 == 0) {
even_div++;
}
else {
odd_div++;
}
}
}
}
return (even_div == odd_div);
}
let N = 6;
if (divisorsSame(N)) {
document.write( "Yes" );
}
else {
document.write( "No" );
}
</script>
|
Time Complexity: O(?N), where N is the given number
Auxiliary Space: O(1)
Efficient Approach: The idea is to observe that the numbers whose count of even and odd divisors are equals forms the following Arithmetic Progression:
2, 6, 10, 14, 18, 22, …
- The Kth term of the above series is:
- Now we have to check whether N is a term of the above series or not by the equation:
=>
=>
- If the value of K calculated using the above formula is an integer, then N is the number with equal count of even and odd divisors.
- Else N is not the number with equal count of even and odd divisors.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool divisorsSame( int n)
{
return (n - 2) % 4 == 0;
}
int main()
{
int N = 6;
if (divisorsSame(N)) {
cout << "Yes" ;
}
else {
cout << "No" ;
}
return 0;
}
|
Java
import java.util.*;
class GFG{
static boolean divisorsSame( int n)
{
return (n - 2 ) % 4 == 0 ;
}
public static void main(String[] args)
{
int N = 6 ;
if (divisorsSame(N))
{
System.out.println( "Yes" );
}
else
{
System.out.println( "No" );
}
}
}
|
Python3
def divisorsSame(n):
return (n - 2 ) % 4 = = 0 ;
N = 6 ;
if (divisorsSame(N)):
print ( "Yes" );
else :
print ( "No" );
|
C#
using System;
class GFG{
static bool divisorsSame( int n)
{
return (n - 2) % 4 == 0;
}
public static void Main()
{
int N = 6;
if (divisorsSame(N))
{
Console.Write( "Yes" );
}
else
{
Console.Write( "No" );
}
}
}
|
Javascript
<script>
function divisorsSame( n)
{
return (n - 2) % 4 == 0;
}
let N = 6;
if (divisorsSame(N)) {
document.write( "Yes" );
}
else {
document.write( "No" );
}
</script>
|
Time complexity: O(1)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...