Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- 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};
- bool check(int a, int b) {
- if (a - b < 0) {
- return false;
- }
- return true;
- }
- int compute(int x, int y) {
- int x_primes[20];
- int primes_nr = 0;
- int sum = y - x;
- std::vector<int> dp(y, INT32_MAX);
- dp[0] = 1;
- for (int i = 0; i < 26; i++) {
- if (x <= primes[i]) {
- break;
- }
- if (x % primes[i] == 0) {
- x_primes[primes_nr++] = primes[i];
- dp[primes[i]] = 1;
- }
- }
- for (int i = 1; i <= sum; i++) {
- for (int j = 0; j < primes_nr; j++) {
- if (check(i, x_primes[j]) && dp[i - x_primes[j]] != INT32_MAX) {
- dp[i] = std::min(dp[i], 1 + dp[i - x_primes[j]]);
- }
- }
- }
- if (dp[sum] == INT32_MAX) {
- return -1;
- }
- return dp[sum];
- }
- int main() {
- int x, y;
- while (1) {
- std::cin >> x >> y;
- if (x == 0 && y == 0) {
- break;
- }
- std::cout << compute(x, y) << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement