Canada Numbers
Last Updated :
16 Jul, 2021
Canada Number is a number N such that the sum of the squares of the digits of N is equal to the sum of the non-trivial divisors of N, i.e. (Sum of divisors of N)- 1 – N.
Few Canada numbers are:
125, 581, 8549, 16999…
Check if N is an Canada number
Given a number N, the task is to check if N is an Canada Number or not. If N is an Canada Number then print “Yes” else print “No”.
Examples:
Input: N = 125
Output: Yes
Explanation:
125’s factors are 1, 5, 25, 125
and 1^2 + 2^2 + 5^2 = 30 = 5 + 25.
Input: N = 16
Output: No
Approach: The idea is to find Sum of all proper divisors of a number and subtract N and 1 from it. Also, find the sum of squares of digits of N. Now check if both the sum are the same or not. If the sum of all proper divisors and sum of squares of digits of N are equal then the number is a Canada number.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int divSum( int num)
{
int result = 0;
for ( int i = 1; i <= sqrt (num); i++) {
if (num % i == 0) {
if (i == (num / i))
result += i;
else
result += (i + num / i);
}
}
return (result - 1 - num);
}
int getSum( int n)
{
int sum = 0;
while (n != 0) {
int r = n % 10;
sum = sum + r * r;
n = n / 10;
}
return sum;
}
bool isCanada( int n)
{
return divSum(n) == getSum(n);
}
int main()
{
int n = 125;
if (isCanada(n))
cout << "Yes" ;
else
cout << "No" ;
return 0;
}
|
Java
import java.io.*;
class GFG{
static int divSum( int num)
{
int result = 0 ;
for ( int i = 1 ; i <= Math.sqrt(num); i++)
{
if (num % i == 0 )
{
if (i == (num / i))
result += i;
else
result += (i + num / i);
}
}
return (result - 1 - num);
}
static int getSum( int n)
{
int sum = 0 ;
while (n != 0 )
{
int r = n % 10 ;
sum = sum + r * r;
n = n / 10 ;
}
return sum;
}
static boolean isCanada( int n)
{
return divSum(n) == getSum(n);
}
public static void main (String[] args)
{
int n = 125 ;
if (isCanada(n))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
import math
def divSum(num):
result = 0
for i in range ( 1 , int (math.sqrt(num)) + 1 ):
if (num % i = = 0 ):
if (i = = (num / / i)):
result + = i
else :
result + = (i + num / / i)
return (result - 1 - num)
def getSum(n):
sum = 0
while (n ! = 0 ):
r = n % 10
sum = sum + r * r
n = n / / 10
return sum
def isCanada(n):
return divSum(n) = = getSum(n)
n = 125
if (isCanada(n)):
print ( 'Yes' )
else :
print ( 'No' )
|
C#
using System;
class GFG{
static int divSum( int num)
{
int result = 0;
for ( int i = 1; i <= Math.Sqrt(num); i++)
{
if (num % i == 0)
{
if (i == (num / i))
result += i;
else
result += (i + num / i);
}
}
return (result - 1 - num);
}
static int getSum( int n)
{
int sum = 0;
while (n != 0)
{
int r = n % 10;
sum = sum + r * r;
n = n / 10;
}
return sum;
}
static bool isCanada( int n)
{
return divSum(n) == getSum(n);
}
public static void Main()
{
int n = 125;
if (isCanada(n))
Console.Write( "Yes" );
else
Console.Write( "No" );
}
}
|
Javascript
<script>
function divSum( num) {
let result = 0;
for (let i = 1; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
if (i == (num / i))
result += i;
else
result += (i + num / i);
}
}
return (result - 1 - num);
}
function getSum( n) {
let sum = 0;
while (n != 0) {
let r = n % 10;
sum = sum + r * r;
n = parseInt(n / 10);
}
return sum;
}
function isCanada( n) {
return divSum(n) == getSum(n);
}
let n = 125;
if (isCanada(n))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time Complexity: O(n1/2)
Auxiliary Space: O(1)
Reference: http://www.numbersaplenty.com/set/Canada_number/
Share your thoughts in the comments
Please Login to comment...