解题思路:
质因数分解,判断是否满足要求。有几个需要注意的地方,一是Simith数不能为素数,二是必须要找严格大于给定n的数。
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <stack>
#define LL long long
using namespace std;
const int maxn = 100000000 + 1000;
int get_sum(int n)
{
int sum = 0;
while(n)
{
sum += (n % 10);
n /= 10;
}
return sum;
}
int solve(int n)
{
int A = get_sum(n);
int sum = 0;
int m = sqrt(n + 0.5);
int pf = 0;
for(int i=2;i<=m;i++)
{
if(n % i == 0)
{
while(n%i == 0)
{
if(i < 10) sum += i;
else sum += get_sum(i);
n /= i;
}
pf++;
}
}
if(n > 1) sum += get_sum(n);
if(A == sum && pf > 0) return 1;
return 0;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF && n)
{
for(int i=n+1;i<maxn;i++)
{
if(solve(i))
{
printf("%d\n",i);
break;
}
}
}
return 0;
}