Advertisement
Guest User

Untitled

a guest
May 19th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. const int primes[26] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101};
  5.  
  6. bool check(int a, int b) {
  7. if (a - b < 0) {
  8. return false;
  9. }
  10. return true;
  11. }
  12.  
  13. int compute(int x, int y) {
  14. int x_primes[20];
  15. int primes_nr = 0;
  16. int sum = y - x;
  17. std::vector<int> dp(y, INT32_MAX);
  18. dp[0] = 1;
  19.  
  20. for (int i = 0; i < 26; i++) {
  21. if (x <= primes[i]) {
  22. break;
  23. }
  24.  
  25. if (x % primes[i] == 0) {
  26. x_primes[primes_nr++] = primes[i];
  27. dp[primes[i]] = 1;
  28. }
  29. }
  30.  
  31. for (int i = 1; i <= sum; i++) {
  32. for (int j = 0; j < primes_nr; j++) {
  33. if (check(i, x_primes[j]) && dp[i - x_primes[j]] != INT32_MAX) {
  34. dp[i] = std::min(dp[i], 1 + dp[i - x_primes[j]]);
  35. }
  36. }
  37. }
  38.  
  39. if (dp[sum] == INT32_MAX) {
  40. return -1;
  41. }
  42. return dp[sum];
  43. }
  44.  
  45. int main() {
  46. int x, y;
  47.  
  48. while (1) {
  49. std::cin >> x >> y;
  50. if (x == 0 && y == 0) {
  51. break;
  52. }
  53.  
  54. std::cout << compute(x, y) << '\n';
  55. }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement