首页 > 代码库 > POJ 1142 Smith Numbers(分治法+质因数分解)

POJ 1142 Smith Numbers(分治法+质因数分解)

http://poj.org/problem?id=1142

题意:

给出一个数n,求大于n的最小数,它满足各位数相加等于该数分解质因数的各位相加。

 

思路:
直接暴力。

 1 #include <iostream>   2 #include <cstring>   3 #include <algorithm>    4 #include <vector> 5 #include <queue> 6 #include <cmath> 7 using namespace std; 8  9 int n;10 11 int cacl(int x)12 {13     int sum = 0;14     while (x)15     {16         sum += x % 10;17         x /= 10;18     }19     return sum;20 }21 22 bool isprime(int x)23 {24     int m = sqrt(x + 0.5);25     for (int i = 2; i <= m; i++)26     {27         if (x%i == 0)  return false;28     }29     return true;30 }31 32 int solve(int x)33 {34     if (isprime(x))35         return cacl(x);36     else37     {38         int m = sqrt(x + 0.5);39         for (int i = m; i >1;i--)40         if (x%i == 0)41             return solve(i) + solve(x / i);42     }43 }44 45 int main()46 {47     //freopen("D:\\input.txt", "r", stdin);48     while (~scanf("%d", &n) && n)49     {50         for (int i = n + 1;; i++)51         {52             if (!isprime(i) && cacl(i) == solve(i))53             {54                 printf("%d\n", i);55                 break;56             }57         }58     }59     return 0;60 }

 

POJ 1142 Smith Numbers(分治法+质因数分解)