Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- #include <vector>
- #include <unordered_map>
- using namespace std;
- int minSteps;
- vector<int> getPrimes(int a) {
- vector<int> vec;
- for (int i = 2; a > 1; ++i) {
- while (a % i == 0) {
- if (vec.empty() || vec.back() != i) {
- vec.push_back(i);
- }
- a /= i;
- }
- }
- return vec;
- //m[a] = vec;
- }
- //unordered_map <int,vector<int>> m;
- void addX (int A, int B, int steps) {
- //cout << A << " " << B << " " << steps << endl;
- vector<int> vec;
- if (A == B && steps < minSteps) {
- minSteps = steps;
- return;
- }
- if (A > B) {
- return;
- }
- if (A < 2) {
- return;
- }
- //if(m.find(A) == unordered_map::end){
- vec = getPrimes(A);
- //}
- // vector<int> vec = getPrimes(A);
- ++steps;
- for (int i = 0; i < vec.size(); ++i) {
- //addX(A + m[A][i], B, steps);
- addX(A + vec[i], B, steps);
- }
- }
- int main() {
- int A, B;
- cin >> A >> B;
- int count = 0, steps;
- while (A != 0 || B != 0) {
- minSteps = 1000;
- count++;
- steps = 0;
- addX (A, B, 0);
- if (minSteps == 1000) {
- minSteps = -1;
- }
- cout << "Case " << count << ": " << minSteps << endl;
- cin >> A >> B;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement