Bài toán tìm tổng ước số nguyên tố chung nếu không có trả về -1
Em làm function như này thì bị báo lỗi TLE ạ , làm sao để khắc phục ạ
Bài toán tìm tổng ước số nguyên tố chung nếu không có trả về -1
<= sqrt(n)
thôi nhé. tại sao bạn kiểm tra i == UCLN(m, n)
vậy?
Về mặt toán học, các ước chung của m và n có quan hệ như thế nào với UCLN(m, n)?
Bạn tạo thêm 1 vector chứa tất cả các số nguyên tố bạn đã sinh ra để sử dụng tiếp, không cần phải for i từ 2 đến m nữa.
Em đã tự giải được rồi ạ , em xin cảm ơn
E cũng bị TLE chưa khắc phục được, mọi người có thể giúp e được ko :((
#include <iostream>
#include <cmath>
using namespace std;
bool nt(int n)
{
int i;
if (n<2) return false;
for (i=2;i<=sqrt(n);i++)
if (n%i==0)
return false;
return true;
}
int main()
{
long n,m;
long t=0;
int i;
cin>>n>>m;
for (i=2; i<=m ; i++)
if (nt(i)&& n%i==0 && m%i==0) t+=i;
if (t==0) cout<<"-1";
else cout<<t;
return 0;
}
Trước hết, nếu 1 số p là ước nguyên tố chung của m và n thì có nghĩa p là ước nguyên tố của gcd(m, n).
Bạn cần tính gcd(m, n) trước để giảm bớt độ phức tạp của bài toán.