这题真的没什么说的,用暴力吧..
#include<iostream>
using namespace std;
#include<cmath>
int fan(int n1){
int sum=0;
while(n1>0){
sum += n1%10;
n1 /= 10;
}
return sum;
}
int main(){
int n;
while(scanf("%d",&n),n){
for(int x=n+1;;x++){
int sum=fan(x);
int ans=x,temp=0,flag=0;
for(int i=2;i<=sqrt(ans*1.0);i++){
while(ans%i==0){ /// 求素因子的累加和
temp += fan(i);
ans /=i;
flag++; /// 进行了该操作的才会是史密斯数
}
}
if(ans>1) temp += fan(ans); /// 要是这个存在,则 ans 一定是一个素数
if(temp==sum && flag){
printf("%d\n",x);
break;
}
}
}
}