• poj1142 Smith Numbers


    Poj1142 Smith Numbers

    Smith Numbers
    Time Limit: 1000MS Memory Limit: 10000K
    Total Submissions: 13854 Accepted: 4716
    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

    Mid-Central European Regional Contest 2000

    题意 大于n满足你的各个位数之和等于质因子各位数之和。
    题解 暴力过。

    #include<cstdio>
    int fun(long long a)
    {
        int sum=0;
        while(a>0)
        {
            sum+=a%10;
            a/=10;
         }
         return sum; 
    }
    
    bool prime(long long a)
    {
        int flag=1;
        if (a==1) return false;
        if(a==2) return true;
        for(int i=2;i*i<a+1;i++)
        if(a%i==0)
        {
            flag=0;
            break;
        }
        if(flag)
        return true;
        else
        return false;
    }
    
    int cnt(long long a)
    {
        if(prime(a))
        return fun(a);
        else
        {
            for(int i=2;i*i<a+1;i++)
            {
                if(a%i==0)
                return cnt(i)+cnt(a/i);
            }
        }
    }
    
    int main()
    {
        long long a;
        while(scanf("%lld",&a)!=EOF&&a)
        {
            while(a++)
            {
                int sum=fun(a);
    
                if(!prime(a)&&fun(a)==cnt(a))
                break;
    
            }
        printf("%lld
    ",a);
    
    
        }
        return 0;
     } 

    这时间倒也不是很多,79ms

  • 相关阅读:
    vue基础笔记
    HM.DAY-02
    前端基础(三)
    前端基础 (二)
    前端基础(一)
    爬虫基础入门(二)
    爬虫基础入门(一)
    Python进阶(三)
    Python进阶(二)
    python切片
  • 原文地址:https://www.cnblogs.com/-xiangyang/p/9220268.html
Copyright © 2020-2023  润新知