Given an integer n. Check whether the number is refactorable or not. A refactorable number is an integer n that is divisible by count of all it’s divisors.
Example :
Input: n = 8
Output: yes
Explanation:
8 has 4 divisors: 1, 2, 4, 8
Since 8 is divisible by 4 therefore 8 is
refactorable number.
Input : n = 4
Output: no
This solution is pretty straightforward. The idea is to iterate from 1 to sqrt(n) and count all the divisors of a number. After that we just need to check whether the number n is divisible by it’s total count or not.
C++
#include <bits/stdc++.h>
bool isRefactorableNumber( int n)
{
int divCount = 0;
for ( int i = 1; i <= sqrt (n); ++i)
{
if (n % i==0)
{
if (n / i == i)
++divCount;
else
divCount += 2;
}
}
return n % divCount == 0;
}
int main()
{
int n = 8;
if (isRefactorableNumber(n))
puts ( "yes" );
else
puts ( "no" );
n = 14;
if (isRefactorableNumber(n))
puts ( "yes" );
else
puts ( "no" );
return 0;
}
|
Java
class GFG
{
static boolean isRefactorableNumber( int n)
{
int divCount = 0 ;
for ( int i = 1 ; i <= Math.sqrt(n); ++i)
{
if (n % i== 0 )
{
if (n / i == i)
++divCount;
else
divCount += 2 ;
}
}
return n % divCount == 0 ;
}
public static void main (String[] args)
{
int n = 8 ;
if (isRefactorableNumber(n))
System.out.println( "yes" );
else
System.out.println( "no" );
n = 14 ;
if (isRefactorableNumber(n))
System.out.println( "yes" );
else
System.out.println( "no" );
}
}
|
Python3
import math
def isRefactorableNumber(n):
divCount = 0
for i in range ( 1 , int (math.sqrt(n)) + 1 ):
if n % i = = 0 :
if n / i = = i:
divCount + = 1
else :
divCount + = 2
return n % divCount = = 0
n = 8
if isRefactorableNumber(n):
print ( "yes" )
else :
print ( "no" )
n = 14
if (isRefactorableNumber(n)):
print ( "yes" )
else :
print ( "no" )
|
C#
using System;
class GFG
{
static bool isRefactorableNumber( int n)
{
int divCount = 0;
for ( int i = 1; i <= Math.Sqrt(n); ++i)
{
if (n % i==0)
{
if (n / i == i)
++divCount;
else
divCount += 2;
}
}
return n % divCount == 0;
}
public static void Main ()
{
int n = 8;
if (isRefactorableNumber(n))
Console.WriteLine( "yes" );
else
Console.Write( "no" );
n = 14;
if (isRefactorableNumber(n))
Console.Write( "yes" );
else
Console.Write( "no" );
}
}
|
PHP
<?php
function isRefactorableNumber( $n )
{
$divCount = 0;
for ( $i = 1; $i <= sqrt( $n ); ++ $i )
{
if ( $n % $i ==0)
{
if ( $n / $i == $i )
++ $divCount ;
else
$divCount += 2;
}
}
return $n % $divCount == 0;
}
$n = 8;
if (isRefactorableNumber( $n ))
echo "yes" ;
else
echo "no" ;
echo "\n" ;
$n = 14;
if (isRefactorableNumber( $n ))
echo "yes" ;
else
echo "no" ;
?>
|
Javascript
<script>
function isRefactorableNumber(n)
{
let divCount = 0;
for (let i = 1; i <= Math.sqrt(n); ++i)
{
if (n % i==0)
{
if (n / i == i)
++divCount;
else
divCount += 2;
}
}
return n % divCount == 0;
}
let n = 8;
if (isRefactorableNumber(n))
document.write( "yes" + "<br />" );
else
document.write( "no" + "<br />" );
n = 14;
if (isRefactorableNumber(n))
document.write( "yes" );
else
document.write( "no" );
</script>
|
Output:
yes
no
Time complexity: O(sqrt(n))
Auxiliary space: O(1)
Facts about refactorable number
- There is no refactorable number which is perfect.
- There is no three consecutive integers can all be refactorable.
- Refactorable number have natural density zero.
Reference: https://en.wikipedia.org/wiki/Refactorable_number
This article is contributed by Shubham Bansal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Please Login to comment...