zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    PHP版根据经纬度和半径计算出经纬度的范围
    使用GPS经纬度定位附近地点(某一点范围内查询)
    sql语句查询经纬度范围
    Android检测是否安装了指定应用
    Android 定时器实现的几种方式和removeCallbacks失效问题详解
    Android Service与Activity之间通信的几种方式
    Android操作系统11种传感器介绍
    Android录音--AudioRecord、MediaRecorder
    Android广播接收者应用(电话拦截器)
    收藏夹
  • 原文地址:https://www.cnblogs.com/-xiangyang/p/9220268.html
Copyright © 2011-2022 走看看