Challenge: Identify Smith Numbers
Subdomeniu: Number Theory (number-theory)
Scor cont: 20.0 / 20
Submission status: Accepted
Submission score: 1.0
Submission ID: 464721059
Limbaj: python3
Link challenge: https://www.hackerrank.com/challenges/identify-smith-numbers/problem
Cerinta
A _Smith number_ is a composite number, the sum of whose digits is the sum of the digits of its prime factors obtained as a result of prime factorization (excluding $1$). The first few such numbers are $4$, $22$, $27$, $58$, $85$, $94$, and $121$.
**Example:**
$378 = 2 \times 3 \times 3 \times 3 \times 7$
So, its prime factors are $2$, $3$, $3$, $3$, and $7$.
The sum of its digits is $(3+7+8) = 18$.
The sum of the digits of its factors is $(2+3+3+3+7) = 18$.
Similarly, $4937775$ is a Smith number.
$4937775 = 3 \times 5 \times 5 \times 65837$, and the sum of its digits is the same as the sum of the digits of its prime factors: $4 + 9 + 3 + 7 + 7 + 7 + 5 = 3 + 5 + 5 + 6 + 5 + 8 + 3 + 7 = 42$.
**Task:**
Write a program to check whether a given integer is a Smith number.
Input Format
There will be only one line of input: $N$, the number which needs to be checked.
**Constraints**:
$0 \lt N \lt 2,147,483,647$ _(max value of an integer of the size of $4$ bytes)_
Output Format
$1$ if the number is a Smith number.
$0$ if the number is a not Smith number.
Cod sursa
def SumOfDigits(n):
return n if n<10 else n%10+SumOfDigits(n//10)
def isSmith(n):
Digits=SumOfDigits(n)
Factors,i=0,2
while i*i<=n:
if n%i:i+=1
else:
n//=i
Factors+=SumOfDigits(i)
return int(Digits==Factors+SumOfDigits(n))
n=int(input())
print(isSmith(n) if n>1 else 0)
HackerRank Number Theory – Identify Smith Numbers
