一个C语言程序,两自然数和为667,最小公倍数与最大公约数相比是120

2025-03-10 21:37:57
推荐回答(3个)
回答1:

思路如下:

1 对所有可能的数进行遍历。

2 对每个数,求得另外一个数。

3 计算两数的最大公约数和最小公倍数,判断是否可以整除且商为120.

4 如果符合,则为该数。否则继续。


代码如下:

#include 
int main()
{
    int n,m,gcd, lcd;
    for(n = 1; n < 334; n ++)//对可能的n遍历。
    {
        m = 667-n;
        for(gcd = n; gcd >=1 ; gcd--)//求最大公约数。
            if(m%gcd == 0 && n%gcd == 0) break;
        lcd=m/gcd*n;//求最小公倍数。
        if(lcd % gcd == 0 && lcd/gcd==120) 
            printf("m = %d, n = %d\n",m,n);
    }
    
    return 0;
    
}

回答2:

#include 
int gcd(int a,int b);
int lcm(int a,int b);
int main(void)
{
int i;
for(i=1;i<667/2;++i)
{
if(lcm(i,667-i)/gcd(i,667-i)==120)
{
printf("%d,%d\n",i,667-i);
}
}
return 0;
}
int gcd(int a,int b)
{
if(a%b)
{
return gcd(b,a%b);
}
return b;
}
int lcm(int a,int b)
{
return a/gcd(a,b)*b;
}

回答3:

#include
int main()
{
int i,j;
int a,b,m;
int gcd,lcm;
for(m=2;m<=333;m++){
for(i=m;i>=1;i--)
if(!((m%i)||((667-m)%i))){
gcd=i;
break;
}j=667-m;
b=j;
a=m;
while(b%a)
b+=j;
lcm=b;
if((lcm==gcd*120)&&(lcm%gcd)==0)
printf("%d %d\n",m,667-m);
}
return 0;
}