题目大意:
输入两个整数X,Y(1<=x,y<=1e9),输出一个整数Z(1<=Z<=1e18),保证Z是X的倍数并且不是Y的倍数,如果没有满足条件的Z,则输出-1,否则输出Z。
思路:
如果X是Y的倍数,则Z必定不存在,排除该情况之后,想到了最大公约数,设XY的最大公约数是g,把X分成两部分g*a,Y分成两部分g*b,a与b的最大公约数为1,想要所得数即是X的倍数并且不是Y的倍数,则保证gcd(X,Z)==X&&gcd(Y,Z)!=Y,则a*a*g是所求,gcd(a*a*g,a*g)=a*g=X,gcd(a*a*g,b*g)=g*gcd(a*a,b)=g*gcd(a,b)*gcd(a,b)=g,此处有一个问题,如果b=1,那么gcd(a*a*b,Y)==Y,但这种情况之前已经排除,b=1意味着X是Y的倍数,所以不予考虑。
#include<cstdio>
using namespace std;
typedef long long ll;
ll n,m;
ll gcd(ll x,ll y){
if(x%y==0) return y;
return gcd(y,x%y);
}
int main() {
while(~scanf("%lld%lld",&n,&m)){
if(n%m==0){
printf("-1\n");
}
else {
ll x=n/(gcd(n,m));
printf("%lld\n",x*n);
}
}
return 0;
}