poj 1142
Posted 一个_小菜鸟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 1142相关的知识,希望对你有一定的参考价值。
http://poj.org/problem?id=1142
题意:找一个比n大的数字,这个数字要可以分解(这点很重要)成,分解的因子和,和这个数字的各位数字和,相等的话,输出这个数字
思路:因为这个数字要可以分解,所以首先判断这个数是否是质数,这个很重要,因为质数不符合题意。然后对这个数字进行分解。递归分解。递归的时候也注意,有可能某个因子是质数,如果这个因子是质数,比如11,也要分解成1和1相加。而不是加11
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 5 int tmp; 6 bool isprime (int k) 7 { 8 int t = sqrt ( k + 0.5 ); 9 for ( int i = 2 ; i <= t ; i ++ ) 10 if ( k % i == 0 ) 11 return false; 12 return true; 13 } 14 int sum(int x) 15 { 16 int temp = 0; 17 while(x>0) 18 { 19 temp += x%10; 20 x/=10; 21 } 22 return temp; 23 } 24 void solve(int x) 25 { 26 if(isprime(x)){ 27 tmp+=sum(x); 28 return; 29 } 30 for(int i = 2; i<=x; i++) 31 { 32 33 if(!(x%i)) 34 { 35 tmp+=sum(i); 36 solve(x/i); 37 break; 38 } 39 } 40 } 41 42 43 int main() 44 { 45 int n; 46 while(scanf("%d",&n)) 47 { 48 if(n<=0) 49 break; 50 for(int i = n+1;; i++) 51 { 52 tmp = 0; 53 solve(i); 54 if(sum(i)==tmp&&!isprime(i)) 55 { 56 printf("%d\n",i); 57 break; 58 } 59 } 60 } 61 return 0; 62 }
以上是关于poj 1142的主要内容,如果未能解决你的问题,请参考以下文章
Smith Numbers POJ - 1142 暴力递归枚举