Code:
for(i=2;i<=sqrt(a);i++)
{
if (a%i==0)
return 0;
else
return 1;
}
Lỗi của bài đó chính là ở chỗ này, và cũng sai chính vì else return 1;
Lý do sai, vòng for đó đang kiểm tra thương của số đó với các số từ 2 đến căn bậc 2 của nó, nếu a chia hết cho một số i là đủ kết luận nó không nguyên tố (return 0
Nhưng nếu để kết luận là số nguyên tố thì phải duyệt hết các giá trị i, vì vậy khi bạn return 1; ngay thì mới kiểm tra với i=2 thì vòng lặp đã thoát nên kết quả bị sai.
Cả 2 code trên mình nghĩ đều sai:
- code 1: thì tất cả số lẻ >1 sẽ là số nguyên tố hết
- code 2: các số >3 đều không phải số nguyên tố
Mình sửa lại như này nhé:
Code:
int kt(int a)
{
int i;
if(a==2||a==3)
return 1;
for(i=2;i<=sqrt(a);i++)
{
if (a%i==0)
return 0;
}
return 1;
}