Không thoát được vòng lặp C

Chào các anh chị, xin các anh chị kiểm tra giúp e sao nó không thoát được vòng for

#include <stdio.h>
void main()
{
	int a, b;
	int x, y, bscnn;
	int giatri=0;
	printf("Nhap so nguyen a = ");
	scanf("%d", &a);
	printf("Nhap so nguyen b = ");
	scanf("%d", &b);
	for (int i = 1; giatri!=1; i++)
    	{
    		    x = a*i;
        		for (int n = 1; b<a; n++)
        		{
        			y = b*n;
        			if (y == x)
        				giatri = 1;
        		}
        		if (giatri == 1)
        		{
        			bscnn = y;
        			break;
    		}
    	}
	printf("Boi so chung nho nhat cua a va b la: %d\n", bscnn);
}

cứ giả sử b bé hơn a, trong vòng lặp for thứ 2 bạn đang kiểm tra xem b có phải bội số của a không. Nếu không thì vòng lặp cứ tiếp tục. bạn nên dùng điều kiện b*n<x thì hợp lý hơn

2 Likes

cám ơn anh nhiều nha

int gcd(int a, int b)
{
  if (b == 0) return a;
  if (a < b) return gcd(b,a);
  return gcd(b, a%b);
}

int lcm(int a, int b)
{
  return a*b / gcd(a,b);
}
5 Likes

Thuật toán chuẩn :smiley: dòng cuối mình sẽ sửa lại là

return a / gcd(a, b) * b;

vì phép nhân có thể tràn.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?