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 else 37 { 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 }