poj1142Smith Numbers质因子分解
题意:一个数不是质数,其质因子的每位加起来等于该数的每位加起来.
1 /* 2 题意:一个数的所有质因子的每位相加起来等于该数的每位相加起来且该数不能是质数,那么就是史密斯数 3 tip:对于分解质因子,只需要判断到i*i <= n(百度), 否则超时. 4 */ 5 #include <iostream> 6 using namespace std; 7 8 int GetSum(int n) 9 { 10 int s=0; 11 while (n) 12 { 13 s += n %10; 14 n /= 10; 15 } 16 return s; 17 } 18 19 bool Smith(int n) 20 { 21 int sum = GetSum(n); 22 int i=2; 23 int tsum=0; 24 int num = n; 25 while (i*i <= n) 26 { 27 if (n % i == 0) 28 { 29 tsum += GetSum(i); 30 n /= i; 31 i = 2; 32 } 33 else 34 i++; 35 if (tsum > sum) 36 return false; 37 } 38 if (n == num) //是否为质数 39 return false; 40 if ((tsum + GetSum(n)) == sum) 41 return true; 42 return false; 43 } 44 45 int main() 46 { 47 int n; 48 int i; 49 while (cin>>n && n) 50 { 51 for (i=n+1; ; i++) 52 { 53 if (Smith(i)) 54 break; 55 } 56 cout<<i<<endl; 57 } 58 return 0; 59 }