zoukankan      html  css  js  c++  java
  • Smith Numbers(分解质因数)

    Smith Numbers
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 14173   Accepted: 4838

    Description

    While skimming his phone directory in 1982, Albert Wilansky, a mathematician of Lehigh University,noticed that the telephone number of his brother-in-law H. Smith had the following peculiar property: The sum of the digits of that number was equal to the sum of the digits of the prime factors of that number. Got it? Smith's telephone number was 493-7775. This number can be written as the product of its prime factors in the following way: 
    4937775= 3*5*5*65837

    The sum of all digits of the telephone number is 4+9+3+7+7+7+5= 42,and the sum of the digits of its prime factors is equally 3+5+5+6+5+8+3+7=42. Wilansky was so amazed by his discovery that he named this kind of numbers after his brother-in-law: Smith numbers. 
    As this observation is also true for every prime number, Wilansky decided later that a (simple and unsophisticated) prime number is not worth being a Smith number, so he excluded them from the definition. 
    Wilansky published an article about Smith numbers in the Two Year College Mathematics Journal and was able to present a whole collection of different Smith numbers: For example, 9985 is a Smith number and so is 6036. However,Wilansky was not able to find a Smith number that was larger than the telephone number of his brother-in-law. It is your task to find Smith numbers that are larger than 4937775!

    Input

    The input file consists of a sequence of positive integers, one integer per line. Each integer will have at most 8 digits. The input is terminated by a line containing the number 0.

    Output

    For every number n > 0 in the input, you are to compute the smallest Smith number which is larger than n,and print it on a line by itself. You can assume that such a number exists.

    Sample Input

    4937774
    0

    Sample Output

    4937775

    Source

    AC代码:

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 int CalDigitsSum(int num)
     6 {
     7     int sum = 0;
     8     while(num)
     9     {
    10         sum += num % 10;
    11         num /= 10;
    12     }
    13     return sum;
    14 }
    15 
    16 int PrimaryCal(int num)
    17 {
    18     int total = 0;
    19     int tempNum = num;
    20     for(int i = 2; i * i <= num; i++)
    21     {
    22         int temp;
    23         if(num % i == 0)
    24             temp = CalDigitsSum(i);
    25         while(num % i == 0)
    26         {
    27             total += temp;
    28             num /= i;
    29         }
    30     }
    31     if(tempNum == num)
    32         return -1;
    33     if(num != 1)
    34         total += CalDigitsSum(num);
    35     return total;
    36 }
    37 
    38 int main()
    39 {
    40     int n;
    41     while(1)
    42     {
    43         cin >> n;
    44         if(n == 0)
    45             break;
    46         for(int i = n + 1; ; i++)
    47         {
    48             if(CalDigitsSum(i) == PrimaryCal(i))
    49             {
    50                 cout << i << endl;
    51                 break;
    52             }
    53         }
    54     }
    55     return 0;
    56 }
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    2019.8.15刷题统计
    2019.8.12刷题统计
    2019.8.11刷题统计
    2019.8.10刷题统计
    2019.8.9刷题统计
    2019.8.8刷题统计
    2019.8.7刷题统计
    2019.8.6刷题统计
    xuezhan.org 6.28
    xuezhan.org 6.27
  • 原文地址:https://www.cnblogs.com/h-hkai/p/8724302.html
Copyright © 2011-2022 走看看