题意:两个人分别在a*x+b和c*y+d时发出声音(x,y=0,1,2,...),a,b,c,d已知,问他们会同时发出声音吗.能够输出时刻,否则输出-1
思路:暴力或者扩展欧几里得
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int a,b,c,d;
while(~scanf("%d%d%d%d",&a,&b,&c,&d))
{
int gcd=__gcd(a,-c);
if((d-b)%gcd)
{
printf("-1\n");
continue;
}
for(int i=0;;i++)
{
if((b+a*i-d)%c==0&&b+a*i-d>=0)
{
printf("%d\n",a*i+b);
break;
}
}
}
}
#include<cstdio>
const int maxn = 1e6+100;
int main()
{
///freopen("in.txt","r",stdin);
int a,b,c,d;
while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
{
bool flag=1;
for(int i=0;i<maxn;i++)
{
int t1=b+a*i;
if((t1-d)%c==0&&t1>=d)
{
printf("%d\n",t1);
flag=0;
break;
}
}
if(flag)printf("-1\n");
}
}
扩展欧几里得