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
Bài liên quan
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
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
Đú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ế
bạn muốn kiểm tra số đó trong phạm vị bao nhiêu trở lại?