Refactorable number
Last Updated :
13 Sep, 2023
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
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...