zoj1133

来源:互联网 发布:摇奖转盘软件 编辑:程序博客网 时间:2024/05/23 01:32

题目大意:

Smith数的定义是各位数字之和与它的各个质因数(可以重复)的各位数字之和的总和相同的数,且不是素数。给一个数n,算出比n大的最小的Smith数。

解题思路:

从n+1开始遍历

代码如下:

#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>int CalDigitsSum(int num){  int sum=0;  while(num)  {    sum+=num%10;    num/=10;  }  return sum;}int PrimaryCal(int num){  int total=0;  int tempNum=num;  int i;  int temp;  for(i=2;i*i<=num;i++)  {    if(num%i==0)    {      temp=CalDigitsSum(i);    }    while(num%i==0)    {      total+=temp;      num/=i;    }  }  if(tempNum==num)  {    return -1;  }  if(num!=1)  {    total+=CalDigitsSum(num);  }  return total;}int main(){  int n,i;  while(scanf("%d",&n)&&n)  {    for(i=n+1;;i++)    {      if(CalDigitsSum(i)==PrimaryCal(i))      {        printf("%d\n",i);        break;      }    }  }  return 0;}
0 0
原创粉丝点击