Two little greedy bears have found two pieces of cheese in the forest of weight a and b grams, correspondingly. The bears are so greedy that they are ready to fight for the larger piece. That's where the fox comes in and starts the dialog: "Little bears, wait a little, I want to make your pieces equal" "Come off it fox, how are you going to do that?", the curious bears asked. "It's easy", said the fox. "If the mass of a certain piece is divisible by two, then I can eat exactly a half of the piece. If the mass of a certain piece is divisible by three, then I can eat exactly two-thirds, and if the mass is divisible by five, then I can eat four-fifths. I'll eat a little here and there and make the pieces equal".
The little bears realize that the fox's proposal contains a catch. But at the same time they realize that they can not make the two pieces equal themselves. So they agreed to her proposal, but on one condition: the fox should make the pieces equal as quickly as possible. Find the minimum number of operations the fox needs to make pieces equal.
The first line contains two space-separated integers a and b (1 ≤ a, b ≤ 109).
If the fox is lying to the little bears and it is impossible to make the pieces equal, print -1. Otherwise, print the required minimum number of operations. If the pieces of the cheese are initially equal, the required number is 0.
Sample test(s)
15 20
3
14 8
-1
6 6
0#include <iostream> #include <cmath> #include <cstring> #include <cstdio> #include <cstdlib> #include <algorithm> using namespace std; int gcf(int a,int b){ if(b==0) return a; else return gcf(b,a%b); } int main() { int a,b; int n,m; int i,j; int sum; cin>>a>>b; sum=gcf(a,b); i=j=0; n=a/sum; m=b/sum; while(n%2==0||n%3==0||n%5==0) { if(n%2==0) { n=n/2; i++; } else { if(n%3==0) { n=n/3; i++; } else { if(n%5==0) { n=n/5; i++; } } } } while(m%2==0||m%3==0||m%5==0) { if(m%2==0) { m=m/2; j++; } else { if(m%3==0) { m=m/3; j++; } else { if(m%5==0) { m=m/5; j++; } } } } if(n==1&&m==1) { cout<<i+j<<endl; } else { cout<<"-1"<<endl; } }