Rút gọn code tinh tổng các ước chung của hai số tự nhiên

Đây là phần làm của mình mình cảm thấy cách này khá nhanh bạn nào có thể chỉ mình cách gọn hơn ko? :heart_eyes:

#include<iostream>
using namespace std;
int ucln(int a,int b)
{
	cout<<" a=";cin>>a;
	cout<<" b=";cin>>b;
	if(a==0 || b==0)
	{
		return a+b;
	}
	while(a!=b)
	 {
	 	if(a>b) a=a-b;
	 	else b=b-a;
	 }
	    return a;
 }
int main()
{ 
      int a,b;
      int k=ucln(a,b);
      int s=0;
      for(int i=1;i<=k;i=i+1)
      {
      	if(k%i==0) s=s+i;
      }
      cout<<"tong uc ="<<s;
}

:+1: nhưng còn chỗ này :slight_smile:

nên là sqrt(k) và sửa lại tương ứng :smiley:

6 Likes

Format lại code cho dễ nhìn bạn ơi.
Thêm nữa là về hàm ucln nên sử dụng giải thuật euclid sẽ nhanh hơn.

while (b != 0)
{
    r = a % b;
    a = b;
    b = r;
}
return a;
6 Likes

Cảm ơn các bạn nhiều

Tìm ước chung lớn nhất (gg đệ quy, chỉ 2, 3dofng code) rồi từ kết quả đó tính tổng tất cả các ước của nó bằng vòng for

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