Cần giải thích giúp code tìm số nguyên tố

Em đang tự học đến vòng For, có 1 bài tìm số nguyên tố mà lời giải khó hiểu quá, mong mọi người giải thích giúp ạ

#include<iostream>
#include<conio.h>
#include<math.h>    

using namespace std;

int main()
{

     // Khai bao bien
     int n;

     // Nhap gia tri dau vao
     cout<<"Nhap mot so :";
     cin>>n;

      cout<<"Danh sach cac so nguyen to la "<<n<<endl;

     //vong lap for de tim so nguyen to
     for (int i=2; i<n; i++)
     {
        bool prime=true;
        for (int j=2; j*j<=i; j++)
        {
            if (i % j == 0)
            {
                prime=false;
                break;
            }
        }
        if(prime) cout << i << endl;
      }

     
     return 0;
 }

trên là lời giải web. Vòng for ban đầu i = 2, j= 2, vậy i %j == 0 thì biến prime=false gặp break thoát khỏi vòng lặp for trong thì sau khi thoát biến prime = false hay = true vậy a?
Em tự học ở nhà kiến thức nó hơi lỗ hổng, cái gì sai cơ bản mong m.n chỉ dạy :slight_smile:
Em tự giải thì dùng 1 fun riêng để tìm số nguyên tố, sau mới dùng 1 vòng for để in ra.

false nhé bạn :slight_smile: vì biến prime trong for và ngoài for là một.

3 Likes

nếu prime = false thì xuống dòng if dưới sao nó in ra số nguyên tố 2 đc ạ?

Để ý kĩ dòng này xem :kissing:

2 Likes

Vấn đề ở đây là bạn chưa biết tên gọi giải thuật/ phương pháp tìm số nguyên tố mà bài bạn đang trích dẫn ở trên là cái nào trong thực tế toán học.

Vì thế, tốt hơn hết là đọc qua các thuật toán tìm số nguyên tố mà loài người đã biết đến cho tới nay, rồi xác định xem bài của bạn là cái nào trong đám này. Khi đọc xong, bạn sẽ thấy dễ dàng hơn nhiều.

Ơ ra tô xờ ten?

4 Likes

Như bác Vô Thin đã nêu trên, mình sẽ trích dẫn 2 câu này cho bạn hiểu rõ thêm:

  • Kiểm tra các số từ 2 đến n - 1 , nếu n chia hết cho một trong những số đó thì n không phải là số nguyên tố. Ngược lại thì n là số nguyên tố ===> cách ta học từ nhỏ
  • Kiểm tra các số từ 2 đến √n , nếu n chia hết cho một trong những số đó thì n không phải là số nguyên tố. Ngược lại thì n là số nguyên tố ====> đây là cách được sử dụng trong vòng for 2 của bạn. Thay vì viết j <= căn i, thì người ta viết j * j <= i
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?