您的位置:首页 > 编程语言 > PHP开发

1027: Smith Numbers

2010-03-05 09:34 218 查看
 

StatusIn/OutTIME LimitMEMORY LimitSubmit TimesSolved UsersJUDGE TYPE

stdin/stdout30s8192K2312565Standard
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:



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 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

这道题写的太差了,看来真的不在状态。

整个过程没有考虑清楚,首先这个SMITH数必须是合数,题意没读清楚,一位只要是质数都是。

第二,这个过程的N1,N2,SUM,SUM2,T的初始化没弄好

第三,如果T是大于等于10的,那么就需要把它的各位数字相加,这也没弄清楚

#include<iostream>
int is_prime(int n)
{
 for(int i=2;i*i<=n;i++)
     if(n%i==0) return i;
 return 1;
}
int main()
{
 int n,n2;
 freopen("in.txt","r",stdin);
 freopen("out.txt","w",stdout);
 while((scanf("%d",&n),n)!=0)
 {
  int sum=0,sum2=0;
  n2=n;
  while(1)
  {
   n=n2;
   n++;
   n2=n;
   sum=0;
   sum2=0;
   int t=n;
      while(t>0)
      {
         sum+=t%10;
         t=t/10;
      }
   t=is_prime(n);
   if(t==1) continue;
   while(t>1)
   {
      int t2=t;
      if(t2>=10)
      {
     while(t2>0)
              {
               sum2+=t2%10;
               t2=t2/10;
              }
         }
         else
           sum2+=t2;
      n=n/t;
      t=is_prime(n);
   }
   while(n>0)
      {
      sum2+=n%10;
      n=n/10;
      }
      if(sum2==sum) break;
   } 
   printf("%d/n",n2);
 }
 return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息