关于PAT乙级1062的问题,如何解决?(语言-c语言)

这是pat乙级1062,我的答案中间有两个检测点错误,求指点

img

#include<stdio.h>
#include<string.h>

int sf(int a,int b)
{
    int min= a>b?b:a;
    for(int i=2; i<=min; i++)
    {
        if(a%i==0&&b%i==0)
            return 0;
    }
    return 1;
}//判断是否最简
int main(void)
{
    int a,b,c,d,e;
    scanf("%d/%d %d/%d %d",&a,&b,&c,&d,&e);
    int A,C;
    A=a*d*e;
    C=c*b*e;    //通分
    int f=1;
    for(int i=1; i*b*d<C; i++)
    {
        if(i*b*d>=A&&i*b*d<=C&&f==1)
        {
            if(sf(i,e))
                printf("%d/%d",i,e);
            f=0;
            continue;
        }
        if(i*b*d>=A&&i*b*d<=C)
        {
            if(sf(i,e))
                printf(" %d/%d",i,e);
        }
    }
    return 0;
}

要用辗转相除法,用单纯的除因子遍历可能会有问题
参考下这个方法

供参考:

#include <stdio.h>
void swap(int& a, int& b){ //引用
    b = a + b;
    a = b - a;
    b = b - a;
}
int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}
int main() 
{
    int n1, m1, n2, m2, k, first, t;
    scanf("%d/%d %d/%d %d", &n1, &m1, &n2, &m2, &k);
    if (n1 * m2 > n2 * m1) {
        swap(n1, n2);
        swap(m1, m2);
    }
    for (t = n1 * k / m1 + 1, first = 1; t * m2 < k * n2; t++) {
        if (gcd(t, k) == 1) {
            if (first) {
                printf("%d/%d", t, k);
                first = 0;
            }
            else
                printf(" %d/%d", t, k);
        }
    }
    return 0;
}