Hỏi về code tối ưu thuật toán kiểm tra số nguyên tố

#include <stdio.h>
#include <math.h>

int main()
{
    int n;
    printf("Nhap so n: ");
    scanf("%d", &n);
    int sqrtn = sqrt(n);
    int LaNguyenTo = 1;
    for(int i=2; i<=sqrtn && LaNguyenTo; i++)
        LaNguyenTo = (n%i);
    if(LaNguyenTo)
        printf("%d la so nguyen to", n);
    else
        printf("%d khong phai la so nguyen to", n);

}

Đây là đoạn code em xem trên mạng. Em thắc mắc là chỗ LaNguyenTo của vòng lặp for và if ( LaNguyenTo) có nghĩa là gì sao chúng ta không dùm kiểu Bool mà lại để như thế này thì compiler vẫn hiểu

theo mình biết thì trong C, giá trị bằng 0 tương đương với FALSE, còn khác 0 thì là TRUE

1 Like

Mình còn thắc mắc nữa là i<=sqrtn && LaNguyenTo có phải là i<=sqrtn && LaNguyenTo == 1

mỗi vòng lặp thì gán LaNguyeTo = n%i có thể khác 1 mà, tức là không chia hết ấy

Mình đang hỏi ý nghĩa của điều kiện LaNguyenTo có ý nghĩa gì bạn ơi

Ở C thì các giá trị khác 0 hiểu là True còn bằng 0 hiểu là False, nên theo như code trên thì cứ lấy dư n%i cho đến khi không dư tức n chia hết i thì LaNguyenTo==0 (False); ĐK i<=sqrtn && LaNguyenTo trở thành False vòng lập dừng;
if(LaNguyenTo) nếu LaNguyenTo khác 0 True và ==0 tức có phần tử bị chia hết

tức là i<=sqrtn && LaNguyenTo != 0 đúng k bạn

1 Like

Đúng đấy bạn do bên C không có kiểu Bool nên hiểu nt, còn C++ mới có kiểu Bool

sao có mỗi dòng code vậy mà ko hiểu thế :unamused:

bạn muốn kiểm tra số đó trong phạm vị bao nhiêu trở lại?

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