这题很蛋疼
我一直拖到快折扣才写
写了几次也都有几个案例RE或WA了
实在没兴趣弄这个题
就找了个学长的程序,改了下
#include<stdio.h>
static unsigned long b[100000]={0},k,a[100000];
long ys(long a,long b)
{
long m,n,r;
m=(a>b)?a:b;
n=(a>b)?b:a;
do{r=m%n;
if(r==0)
break;
m=n;
n=r;
}while(1);
return n;
}
int main(void)
{
unsigned long bi_a,bi_b,bi_c,bi_d,i,j=0,number,n,num[20],flag,max,e,f,x,k=0;
scanf("%ld",&number);
for(i=0;i<number;i++){
scanf("%ld",&num[i]);
}
for(i=0;i<number;i++)
for(j=0;j<number;j++){
if(num[i]%num[j]==0){
a[k++]=num[i]/num[j];
b[num[i]/num[j]-1]=1;
}
else{
if(num[j]%num[i]==0){
a[k++]=num[j]/num[i];
b[num[j]/num[i]-1]=1;
}
}
}
for(i=0;i<k;i++)
for(j=0;j<k;j++){
if(a[j]==0)
continue;
if(a[i]%a[j]==0){
x=a[i]/a[j];
if(x==0)
continue;
if(b[x-1]!=1){
a[k++]=x;
b[x-1]=1;
}
}
x=a[i]*a[j];
if(x>100000||x==0)
continue;
else{
if(b[x-1]!=1){
b[x-1]=1;
a[k++]=x;
}
}
}
scanf("%ld",&n);
for(i=0;i<n;i++){
scanf("%ld%ld",&bi_a,&bi_b);
flag=0;
max=ys(bi_a,bi_b);
bi_c=bi_a/max;
bi_d=bi_b/max;
j=1;
while(1){
e=bi_c*j;
f=bi_d*j;
if(e>100000||f>100000)
break;
if(b[e-1]==1&&b[f-1]==1){
flag=1;
break;
}
j++;
}
if(flag==0)
printf("Gear ratio %ld:%ld cannot be realized.\n",bi_a,bi_b);
else
printf("Gear ratio %ld:%ld can be realized.\n",bi_a,bi_b);
}
return 0;
}