30/09/2018, 18:14

Đoạn code tìm số nguyên tố có sử dụng if(lasoNT) và sqrt(n) có nghĩa là gì?

Đoạn code trên tìm số nguyên tố mình có một đôi chỗ không hiểu bạn nào có thế giải thích dùm mình chỗ comment với, Cảm ơn

#include <iostream>
#include <cmath>
using namespace std;
main () {
    int n;
    cout << "Nhap so nguyen n: "<<endl;
    cin >> n;
    int lasoNT = 1; // chỗ này
    for (int i=2; i<=sqrt(n) && lasoNT; i++) // chỗ này
        lasoNT=(n%i); // chỗ này
    if (lasoNT)
        cout <<""<<n<<" la so nguyen to"; // chỗ này
    else
        cout <<"Khong phai la so nguyen to";
}
Mai Anh Dũng viết 20:29 ngày 30/09/2018

Kiến thức cần biết để hiểu bài này

1.Số khác 0, tương đương với true, số bằng 0, tương đương với false
2.Để kiểm tra số nguyên tố, ta không cần phải chia n cho k với k từ 2..(n-1) mà ta chỉ cần kiểm tra k từ 2…√n


int lasoNT = 1; // chỗ này

Tương đương với

bool lasoNT = true;

i bé hơn căn bậc 2 của n, và là số nguyên số

i<=sqrt(n) && lasoNT

lasoNT bằng kết quả n chia lấy dư i,

lasoNT=(n%i);

Nếu chia hết tức n%i trả ra 0 thì lasoNT bằng 0, tương đương với lasoNT = false


if (lasoNT)

Tương đương với

if (lasoNT != 0)

Vì code này là C++, ta có thể sửa lại như sau cho dễ hiểu hơn

#include <iostream>
#include <cmath>
using namespace std;
main () {
    int n;
    cout << "Nhap so nguyen n: "<<endl;
    cin >> n;
    bool lasoNT = true;
    for (int i=2; i<=sqrt(n) && lasoNT; i++)
        lasoNT = (n%i != 0);
    if (lasoNT)
        cout <<""<<n<<" la so nguyen to";
    else
        cout <<"Khong phai la so nguyen to";
}
Bài liên quan
0