30/09/2018, 17:59

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

James viết 20:00 ngày 30/09/2018

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

duong viết 20:15 ngày 30/09/2018

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

James viết 20:15 ngày 30/09/2018

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

duong viết 20:06 ngày 30/09/2018

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

Thành Thái Nguyễn viết 20:07 ngày 30/09/2018

Ở 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

duong viết 20:10 ngày 30/09/2018

i<=sqrtn && LaNguyenTo

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

Thành Thái Nguyễn viết 20:06 ngày 30/09/2018

Đú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

James viết 20:00 ngày 30/09/2018

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

Đạt Đỗ viết 20:04 ngày 30/09/2018

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

Bài liên quan
0