zoukankan      html  css  js  c++  java
  • POJ 1142 Smith Numbers

    Smith Numbers
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 10002   Accepted: 3512

    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

    //纠结的、本来是简单题、唉,
    //WA、了好多次

    #include <iostream>
    #include <stdio.h>
    #include <cmath>
    using namespace std;
    bool hash[10000];
    bool is_p(int &n)
    {
        int i,m=sqrt(double(n));
        for(i=3;i<=m;i+=2)
         if(n%i==0)
           return false;
        return true;
    }
    int digit(int n)
    {
        int sum=0;
        while(n)
        {
            sum+=n%10;
            n=n/10;
        }
        return sum;
    }
    int rc[1300],l;
    int main()
    {
        int i,j;
        for(i=4;i<10000;i+=2)
          hash[i]=1;
        for(i=3;i<10000;i+=2)
           if(is_p(i))
             for(j=i+i;j<10000;j+=i)
               hash[j]=1;
        j=0;
        for(i=2;i<10000;i++)
         if(!hash[i])
          rc[j++]=i;
        l=j;
        //printf("%d\n",j);
        int n,te;
        int ds,pfds;
        while(scanf("%d",&n),n)
        {
            if(n==1) {printf("4\n");continue;}//开始把这写成2了、、、素数本身不算
            while(n++)
            {
              if(n%2&&is_p(n))
                  continue;
               ds=digit(n);
               pfds=0;
               i=0;
               te=n;
               while(te!=1)
               {
                   while(te%rc[i]==0)
                   {
                      pfds+=digit(rc[i]);
                      te=te/rc[i];
                   }
                   i++;
                   if(te>1&&is_p(te)) {pfds+=digit(te);break;}
               }
               if(ds==pfds)
                 {
                    printf("%d\n",n);
                    break;
                 }
            }
        }
        return 0;
    }

  • 相关阅读:
    单点登录cas常见问题(八)
    11G新特性 -- variable size extents
    11G新特性 -- ASM Fast Mirror Resync
    redhat 6.4 安装VirtualBox自动增强功能功:unable to find the sources of your current Linux kernel
    LINUX使用DVD光盘或者ISO作为本地YUM源
    数据库报ORA-00600: 内部错误代码, 参数: [17059],并产生大量trace日志文件
    Putty设置删除
    ssh/scp 远程连接ssh非默认端口方法
    查看LINUX版本
    RHCE7 -- systemctl命令
  • 原文地址:https://www.cnblogs.com/372465774y/p/2602544.html
Copyright © 2011-2022 走看看