有bug,跑不起来,最小公倍数

img
试着写了一个求最小公倍数的代码,但是跑不起来。没有报错

按照题主的思路用普通方法求最大公约数和最小公倍数

#include <stdio.h>
int main(void)
{
    int a,b,n;
    int tem=0,tep=0;
    scanf("%d%d",&a,&b);
    for(n=1;n<=a;n++) //求最大公约数,循环终止条件为n<=a或者n<=b都可以 不用管a,b谁大谁小 
    {
        if(a%n==0 && b%n==0)
            tem=n;
    }
    for(n=a*b;n>=a;n--) //求最小公倍数 
    {
        if(n%a==0 && n%b==0)
            tep=n;
    }    
    printf("最大公约数:%d\n",tem);
    printf("最小公倍数:%d",tep);
    return 0;    
}

请采纳谢谢


#include<iostream>

 

using namespace std;

 

int max(int n,int m);//最大公约数函数
 

int max(int n,int m)
 

{
 

 int s,t;
 

 if(m>n)
 

 {
 

  t=m;
 

  m=n;
 

  n=t;
 

 }
 

 while(m!=0)
 

 {
 

  s=n%m;
 

  n=m;
 

  m=s;
 }

 

 return n;     //n为最大公约数
 

}
int main()

 

{
 

 int n,m;
 

 cin >> n;
 

 cin >> m;
 

 cout << max(n,m) << ' ' << n*m/max(n,m) << endl; 
//n*m/max(n,m)是指两个数相乘在除以最大公约数的值为最小公倍数

 

}

for循环内部应该是n--不是n++
有帮助望采纳

给出的代码逻辑有问题
欧几里得算法求最大公约数和最小公倍数,这种比较快

#include <stdio.h>
int gcd(int a,int b)
{
    if(b==0)
        return a;
    else
        return gcd(b,a%b);
}
int main(void)
{
    int x=0,y=0;
    printf("输入两个正整数:");
    scanf("%d%d",&x,&y);
    printf("最大公约数为:%d\n",gcd(x,y));
    printf("最小公倍数为:%d",x*y/gcd(x,y));
    return 0;
}

使用辗转相除法求最小公倍数,如果有用望采纳

#include <stdio.h>
int main()
{ 
    int a,b,A,B;
    int lol,lpl;
    printf ("输入两个整数:\n");  
    scanf ("%d%d",&a,&b);
    A=a;
    B=b;
    if(B)
        while((A %= B) && (B %= A));
    lol = A+B;
    lpl = a*b/lol;
    printf ("最小公倍数为:%d\n", lpl); 
    return 0;
}