#include<cstdio> #include<cstring> #include<queue> using namespace std; bool isprimer(int n)//判断素数 { if(n == 1) return false; if(n == 2) return true; for(int i = 2; i*i <= n; i++) if(n % i == 0) return false; return true; } int divide(int n)//计算各个数之和 { int sum = 0; while( n ){ sum += n %10; n /= 10; } return sum; } int prim_divide(int n) { queue<int> q; int i = 2; while(true){ if(isprimer(i) && n%i == 0){ q.push(i); n /= i; if(isprimer( n )){ q.push(n);break; } } else i++; //如果在上一步n不是素数,则i就不能加1,所以要用i++要判断一下才行 } int sum = 0; while( !q.empty() ){ sum += divide(q.front()); q.pop(); } return sum; } int main() { int n; while( scanf("%d", &n) && n ) { while(true){ n++; if(isprimer( n )) continue; if(divide(n) == prim_divide(n)){ printf("%d\n",n);break; } } } }