题目大意:
一个数他的各个数字的和等于他的各个质因子的各个数字的和,这个数就称为smith Number
求n开始的下一个Smith Number。
思路:
暴力搜。
#include <iostream>
#include <cmath>
#include <stdio.h>
#include <map>
#include <algorithm>
using namespace std;
#define LL long long
#define MAX 100000
#define MD 9901
int sum(int num)
{
if(num/10==0)
return num;
return sum(num/10)+num%10;
}
int primsum(int n)
{
int i=2;
int ret=0;
for(;i*i<=n;++i)
while (n%i==0)
{
ret+=sum(i);
n/=i;
}
if(n!=1)
{
if(ret)
ret+=sum(n);
else return -1;
}
return ret ;
}
bool issmith(int n)
{
int d=sum(n);
int p=primsum(n);
if(p==-1||d!=p)
return false;
return true;
}
int main()
{
int n;
while (scanf("%d",&n),n)
{
n++;
while (!issmith(n))
n++;
printf("%d\n",n);
}
}