个性化阅读
专注于IT技术分析

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

本文概述

给定数字” 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)
?>

输出:

A Hoax Number

赞(0) 打赏
未经允许不得转载:srcmini » 算法设计:hoax数字介绍和代码实现
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏