算法设计(hoax数字介绍和代码实现)

本文概述

  • C ++
  • Java
  • Python3
  • C#
  • 的PHP
给定数字” n” , 请检查它是否是一个hoax数字。
一种hoax数字定义为一个复合数字, 其数字总和等于其不同素数的数字总和。这里可能要注意, 1不被视为素数, 因此它不包含在不同素因数的总和中。
例子 :
Input : 22 Output : A Hoax Number Explanation : The distinct prime factors of 22 are 2 and 11. The sum of their digits are 4, i.e 2 + 1 + 1 and sum of digits of 22 is also 4.Input : 84 Output : A Hoax Number Explanation : The distinct prime factors of 84 are 2, 3 and 7. The sum of their digits are 12, i.e 2 + 3 + 4 and sum of digits of 84 is also 12.Input : 19 Output : Not a Hoax Number Explanation : By definition, a hoax number is a composite number.

hoax数字的定义与史密斯数字。实际上, 有些hoax数字也是史密斯数字。显然, 那些在素数分解中没有重复因素的hoax数字, 即方形免费电话也是符合条件的史密斯数字。
实现
1)首先生成数字” n” 的所有唯一质数。
2)如果” n” 不是质数, 请找到在步骤1中获得的因子的数字总和。
3)找到数字” n” 的总和。
4)检查在步骤2和3中获得的总和是否相等。
5)如果总和相等, 则” n” 是一个hoax数字。
C ++
// CPP code to check if a number is a hoax // number or not. #include < bits/stdc++.h> using namespace std; // Function to find distinct prime factors // of given number n vector< int > primeFactors( int n) { vector< int > res; if (n % 2 == 0) { while (n % 2 == 0) n = n / 2; res.push_back(2); }// n is odd at this point, since it is no // longer divisible by 2. So we can test // only for the odd numbers, whether they // are factors of n for ( int i = 3; i < = sqrt (n); i = i + 2) {// Check if i is prime factor if (n % i == 0) { while (n % i == 0) n = n / i; res.push_back(i); } }// This condition is to handle the case // when n is a prime number greater than 2 if (n > 2) res.push_back(n); return res; }// Function to calculate sum of digits of // distinct prime factors of given number n // and sum of digits of number n and compare // the sums obtained bool isHoax( int n) { // Distinct prime factors of n are being // stored in vector pf vector< int > pf = primeFactors(n); // If n is a prime number, it cannot be a // hoax number if (pf[0] == n) return false ; // Finding sum of digits of distinct prime // factors of the number n int all_pf_sum = 0; for ( int i = 0; i < pf.size(); i++) {// Finding sum of digits in current // prime factor pf[i]. int pf_sum; for (pf_sum = 0; pf[i] > 0; pf_sum += pf[i] % 10, pf[i] /= 10) ; all_pf_sum += pf_sum; }// Finding sum of digits of number n int sum_n; for (sum_n = 0; n > 0; sum_n += n % 10, n /= 10) ; // Comparing the two calculated sums return sum_n == all_pf_sum; }// Driver Method int main() { int n = 84; if (isHoax(n)) cout < < "A Hoax Number\n" ; else cout < < "Not a Hoax Number\n" ; return 0; }

Java
// Java code to check if a number is // a hoax number or not. import java.io.*; import java.util.*; public class GFG {// Function to find distinct // prime factors of given // number n static List< Integer> primeFactors( int n) { List< Integer> res = new ArrayList< Integer> (); if (n % 2 == 0 ) { while (n % 2 == 0 ) n = n / 2 ; res.add( 2 ); }// n is odd at this point, // since it is no longer // divisible by 2. So we // can test only for the // odd numbers, whether they // are factors of n for ( int i = 3 ; i < = Math.sqrt(n); i = i + 2 ) {// Check if i is prime factor if (n % i == 0 ) { while (n % i == 0 ) n = n / i; res.add(i); } }// This condition is to // handle the case when // n is a prime number // greater than 2 if (n > 2 ) res.add(n); return res; }// Function to calculate // sum of digits of distinct // prime factors of given // number n and sum of // digits of number n and // compare the sums obtained static boolean isHoax( int n) { // Distinct prime factors // of n are being // stored in vector pf List< Integer> pf = primeFactors(n); // If n is a prime number, // it cannot be a hoax number if (pf.get( 0 ) == n) return false ; // Finding sum of digits of distinct // prime factors of the number n int all_pf_sum = 0 ; for ( int i = 0 ; i < pf.size(); i++) {// Finding sum of digits in current // prime factor pf[i]. int pf_sum; for (pf_sum = 0 ; pf.get(i) > 0 ; pf_sum += pf.get(i) % 10 , pf.set(i, pf.get(i) / 10 )); all_pf_sum += pf_sum; }// Finding sum of digits of number n int sum_n; for (sum_n = 0 ; n > 0 ; sum_n += n % 10 , n /= 10 ) ; // Comparing the two calculated sums return sum_n == all_pf_sum; }// Driver Code public static void main(String args[]) { int n = 84 ; if (isHoax(n)) System.out.print( "A Hoax Number\n" ); else System.out.print( "Not a Hoax Number\n" ); } }// This code is contributed by // Manish Shaw (manishshaw1)

Python3
# Python3 code to check if a number is a hoax # number or not. import math# Function to find distinct prime factors # of given number n def primeFactors(n) : res = [] if (n % 2 = = 0 ) : while (n % 2 = = 0 ) : n = int (n / 2 ) res.append( 2 )# n is odd at this point, since it is no # longer divisible by 2. So we can test # only for the odd numbers, whether they # are factors of n for i in range ( 3 , int (math.sqrt(n)), 2 ): # Check if i is prime factor if (n % i = = 0 ) : while (n % i = = 0 ) : n = int (n / i) res.append(i)# This condition is to handle the case # when n is a prime number greater than 2 if (n > 2 ) : res.append(n) return res# Function to calculate sum of digits of # distinct prime factors of given number n # and sum of digits of number n and compare # the sums obtained def isHoax(n) : # Distinct prime factors of n are being # stored in vector pf pf = primeFactors(n)# If n is a prime number, it cannot be a # hoax number if (pf[ 0 ] = = n) : return False# Finding sum of digits of distinct prime # factors of the number n all_pf_sum = 0 for i in range ( 0 , len (pf)):# Finding sum of digits in current # prime factor pf[i]. pf_sum = 0 while (pf[i] > 0 ): pf_sum + = pf[i] % 10 pf[i] = int (pf[i] / 10 )all_pf_sum + = pf_sum# Finding sum of digits of number n sum_n = 0 ; while (n > 0 ): sum_n + = n % 10 n = int (n / 10 )# Comparing the two calculated sums return sum_n = = all_pf_sum# Driver Method n = 84 ; if (isHoax(n)): print ( "A Hoax Number\n" ) else : print ( "Not a Hoax Number\n" )# This code is contributed by Manish Shaw # (manishshaw1)

C#
// C# code to check if a number is // a hoax number or not. using System; using System.Collections.Generic; class GFG {// Function to find distinct // prime factors of given // number n static List< int > primeFactors( int n) { List< int > res = new List< int > (); if (n % 2 == 0) { while (n % 2 == 0) n = n / 2; res.Add(2); }// n is odd at this point, // since it is no longer // divisible by 2. So we // can test only for the // odd numbers, whether they // are factors of n for ( int i = 3; i < = Math.Sqrt(n); i = i + 2) {// Check if i is prime factor if (n % i == 0) { while (n % i == 0) n = n / i; res.Add(i); } }// This condition is to // handle the case when // n is a prime number // greater than 2 if (n > 2) res.Add(n); return res; }// Function to calculate // sum of digits of distinct // prime factors of given // number n and sum of // digits of number n and // compare the sums obtained static bool isHoax( int n) { // Distinct prime factors // of n are being // stored in vector pf List< int > pf = primeFactors(n); // If n is a prime number, // it cannot be a hoax number if (pf[0] == n) return false ; // Finding sum of digits of distinct // prime factors of the number n int all_pf_sum = 0; for ( int i = 0; i < pf.Count; i++) {// Finding sum of digits in current // prime factor pf[i]. int pf_sum; for (pf_sum = 0; pf[i] > 0; pf_sum += pf[i] % 10, pf[i] /= 10); all_pf_sum += pf_sum; }// Finding sum of digits of number n int sum_n; for (sum_n = 0; n > 0; sum_n += n % 10, n /= 10) ; // Comparing the two calculated sums return sum_n == all_pf_sum; }// Driver Code public static void Main() { int n = 84; if (isHoax(n)) Console.Write( "A Hoax Number\n" ); else Console.Write( "Not a Hoax Number\n" ); } }// This code is contributed by // Manish Shaw (manishshaw1)

的PHP
< ?php // PHP code to check if a number // is a hoax number or not.// Function to find distinct prime // factors of given number n function primeFactors( $n ) { $res = array (); if ( $n % 2 == 0) { while ( $n % 2 == 0) $n = (int) $n / 2; array_push ( $res , 2); }// n is odd at this point, since // it is no longer divisible by 2. // So we can test only for the odd // numbers, whether they are factors of n for ( $i = 3; $i < = sqrt( $n ); $i = $i + 2) {// Check if i is prime factor if ( $n % $i == 0) { while ( $n % $i == 0) $n = (int) $n / $i ; array_push ( $res , $i ); } }// This condition is to handle // the case when n is a prime // number greater than 2 if ( $n > 2) array_push ( $res , $n ); return $res ; }// Function to calculate sum // of digits of distinct prime // factors of given number n // and sum of digits of number // n and compare the sums obtained function isHoax( $n ) { // Distinct prime factors // of n are being stored // in vector pf $pf = primeFactors( $n ); // If n is a prime number, // it cannot be a hoax number if ( $pf [0] == $n ) return false; // Finding sum of digits of distinct // prime factors of the number n $all_pf_sum = 0; for ( $i = 0; $i < count ( $pf ); $i ++) {// Finding sum of digits in // current prime factor pf[i]. $pf_sum ; for ( $pf_sum = 0; $pf [ $i ] > 0; $pf_sum += $pf [ $i ] % 10, $pf [ $i ] /= 10) ; $all_pf_sum += $pf_sum ; }// Finding sum of digits of number n for ( $sum_n = 0; $n > 0; $sum_n += $n % 10, $n /= 10) ; // Comparing the two calculated sums return $sum_n == $all_pf_sum ; }// Driver Code $n = 84; if (isHoax( $n )) echo ( "A Hoax Number\n" ); else echo ( "Not a Hoax Number\n" ); // This code is contributed by // Manish Shaw(manishshaw1) ?>

【算法设计(hoax数字介绍和代码实现)】输出:
A Hoax Number

    推荐阅读