30/09/2018, 16:52

bài tập vòng lặp trong lập trình C

mọi người gúp e bài này
nhập số nguyên n và tính tổng các số nguyên tố nhỏ hơn n

Thành Phạm viết 18:54 ngày 30/09/2018

Bạn có ý tưởng gì chưa, có code thì đưa lên luôn, sai cho nào mọi người sửa giúp
Bài này cẩn thận không cần vòng lặp ấy chứ

Interns viết 18:57 ngày 30/09/2018
 for (i=1;i<=n;i++)
       if (n%i==0)
           j++;
  if (j==2)          //kiem tra co phai la so nguyen to

mình chỉ có ý tưởng kiểm tra xem nó có phải là số ngto k và chưa suy nghĩ ra cách tìm các số ngto nằm trong khoảng nhỏ hơn n để tính tổng

Thành Phạm viết 18:59 ngày 30/09/2018

À mình nhầm cứ tưởng tính các số nguyên không thôi
Chạy biến j từ 1 đến n, kiểm tra biến đó có phải là nguyên tố không, nếu có thì cộng vào biến tổng
Bạn tham khảo topic này nhá.

trung bình cộng các số nguyên tố trong mảng .ai giúp sửa code với ạ

Interns viết 19:07 ngày 30/09/2018

thực sự mình chưa học tới mảng bạn ơi, mà dùng điều kiện j để kiểm tra biến đó có phải là số ngto k bạn

Thành Phạm viết 19:08 ngày 30/09/2018

Thế bạn xem ở đây nhá

expressmagazine.net

Bài toán kiểm tra số nguyên tố

Diet con trung kien,Diet con trung muoi, Diet con trung gian, Diet con trung ruoi, Diet con trung chuot, Uy tín - Chất Lượng - Hiệu quả

nhatlonggunz viết 18:58 ngày 30/09/2018

Em nghĩ nên cải tiến thế này:

  • Mới đầu cho biến sum = 2 (2 là số nguyên tố).
  • Cho
for(int i = 3; i < n; i += 2){
     if(Check(i) == true) // Nếu số đó là SNT, bạn tự làm phần kiểm tra nhé
          sum += i; // Cộng vào tổng
}

Thế là xong. Thuật toán trên thật ra là thuật toán liệt kê các số nguyên tố < n, mình lợi dụng việc đó để cộng tổng luôn.
Giải thích: vì ngoài 2 ra, các số nguyên tố còn lại đều là số lẻ, nên ta để sum bắt đầu từ 2. Rồi để vòng lặp chạy từ 3, mỗi lần lặp thì tăng i thêm 2 thì nó sẽ luôn là số lẻ.

Thành Phạm viết 19:03 ngày 30/09/2018

Cũng hay đấy , mà em xem cái link trên chưa, họ có một số cải tiến nữa đấy

Tuy nhiên, suy nghĩ thêm một chút chúng ta sẽ thấy rằng không cần phải kiểm tra đến giá trị i = n – 1 mà thực chất chỉ cần tới n/2 (n div 2) vì không có ước số nào của n lớn hơn n/2.
Lại suy nghĩ thêm một chút chúng ta sẽ thấy rằng cũng không cần thiết phải kiểm tra đến giá trị n/2 mà chỉ cần đến căn bậc 2 của n là được (các bạn hãy tính toán một chút để thấy tại sao lại như vậy?)

nhatlonggunz viết 18:53 ngày 30/09/2018

Dạ, cái chạy tới sqrt(n) là trong phần Check đó anh.
Còn cộng tổng thì phải chạy đến khi nào >= n thì thôi (đề kêu v)

Thành Phạm viết 18:58 ngày 30/09/2018

Hợp lý cách làm của em rất giống phương pháp Sieve of Eratosthenes (giống đoạn đầu )
http://www.caulacbovb.com/forum/viewtopic.php?f=12&t=12572

nhatlonggunz viết 19:06 ngày 30/09/2018

A, em nhớ rồi, cái đó là thuật sàn Eratosthenes, để liệt kê số nguyên tố

Thành Phạm viết 18:55 ngày 30/09/2018

Ukm, bây giờ người ta dùng thuật toán Miller - Rabin tìm nhanh hơn nhiều nữa nhưng mà anh đọc không hiểu

Bài liên quan
0