Bài Toán Liệt Kê Số Nguyên Tố Nhỏ Hơn N Trong C - Dạy Nhau Học Trang chủ » Thuật Toán Liệt Kê Số Nguyên Tố » Bài Toán Liệt Kê Số Nguyên Tố Nhỏ Hơn N Trong C - Dạy Nhau Học Có thể bạn quan tâm Thuật Toán Liệt Kê Tập Con Thuật Toán Liệt Kê Thường Dùng Là Thuật Toán Liệt Kê Tin Học 10 Thuật Toán Liệt Kê Tổ Hợp Thuật Toán Lru Sẽ Không Hiệu Quả Khi Bài toán liệt kê số nguyên tố nhỏ hơn n trong c programming c quan1011 (Quan) November 15, 2019, 10:31am #1 chào mọi người hiện tại em đang làm bài toán liệt kê số nguyên tố nhỏ hơn n (n nhập từ bàn phím ), em hiện tại đã code xong nhưng không rõ sai đâu mà lúc chạy nó hiện kết quả như hình dưới. Mong mọi người giải đáp em cảm ơn #include <stdio.h> int nguyento(int n) { int i; for (i=2;i<=n;i++) if (n%i==0) { return 1; break; } } int main(void) { int i,n,kt; printf("Nhap vao so nguyen n: "); scanf("%d",&n); printf("\nCac so nguyen to nho hon n la: "); for (i=2;i<=n;i++) if(nguyento(i)==1) printf ("%d ",i); return 0; } Screenshot (11).png1366×768 62.3 KB noname00 (HK boy) split this topic November 15, 2019, 10:34am #2 Dù sao thì topic này cũng lại trồi lên rồi, mình move thẳng code ở post #4 lên post #1 (thay thế cho hình), còn những post khác về up code thì mình move sang off-topic. Evil_Artist (Evil Artist) May 22, 2018, 12:45am #7 Bài này mắc lỗi sai cực kỳ nghiêm trọng ở hàm int nguyento(int n) còn lại tự debug và sửa lỗi nhé. 2 Likes quan1011 (Quan) May 22, 2018, 1:19am #8 đại khái sau khi fix thì vẫn không chạy được ạ int nguyento(int n) { int i; for (i=2;i<=n;i++) if (n%i==0) { return 0; break; } return 1; } Asterick (Asteru) May 22, 2018, 2:38am #9 Vấn đề ở đây là algorithm của bạn sai hoàn toàn rồi (bạn nên check lại logic của bạn trên giấy trước khi viết nó trên máy tính nha) Hint: bạn muốn kiếm all prime numbers < n thì công thức toán Sieve of Eratosthenes là điểm khởi đầu tốt cho bạn đấy. Good luck. 7 Likes quan1011 (Quan) May 22, 2018, 2:42am #10 đại khái mình vẫn chưa rõ giải thuật sai ở đâu, đại khái là mình kiểm tra 1 số n có phải là số nguyên tố không, thì cho i chạy từ 2 đến n, nếu n chia hết cho i thì trả về giá trị 0 ( tức là không phải số nguyên tố), nếu không phải thì trả về giá trị 1. Và nếu hàm trả về giá trị 1 thì in i ra màn hình Evil_Artist (Evil Artist) May 22, 2018, 2:45am #11 Hãy test làm nguyento trước với 1 số nguyên tố (vd 5) và 1 số không nguyên tố (vd 4). Trong câu if(n%i==0) In ra màn hình "%d chia het cho %d", n, i Kiểm tra kết quả để biết sai ở đâu 1 Like quan1011 (Quan) May 22, 2018, 3:08am #12 à rồi cảm ơn bác, tại xét <=n trong vòng lặp for của hàm nên ra kết quả sai namhaiha0308 (Hà Hải Nam) May 22, 2018, 10:30am #13 Đã sửa lại cho bạn nè, đã tối ưu hóa thuật toán để không phải lặp nhiều. #include <stdio.h> #include <math.h> int nguyento(int n) { int i; for (i = 2; i <= (int)sqrt(n); i++) if (n % i == 0 and n != i) { return 1; break; } } int main(void) { int i, n, kt; printf("Nhap vao so nguyen n: "); scanf("%d", &n); printf("\nCac so nguyen to nho hon n la: "); for (i = 2; i <= n; i++) if (nguyento(i) != 1) printf("%d ", i); return 0; } Phương pháp tối ưu để tìm số nguyên tố Nguyen_Phu_Thanh (Nguyễn Phú Thành) May 22, 2018, 10:43am #14 người ta nhập vào số <2 thì sao ? tối ưu code là việc làm sau cùng trước hết là phải tìm hết các trường hợp có thể xảy ra cái đã 3 Likes quan1011 (Quan) May 22, 2018, 10:44am #15 cảm ơn bác, với cả mình cũng đã sửa lại bài để tính các trường hợp < 2 rồi 1 Like namhaiha0308 (Hà Hải Nam) May 22, 2018, 10:51am #17 Cảm ơn bác đã nhắc nhở. <3 1 Like Nhan_Nguyen9 (Nhân Nguyễn) July 4, 2019, 6:42am #18 bạn cho mình hỏi tại sao n%i==0 với tại sao bạn dùng hàm sqrt vậy. mình thấy không có sqrt nó cũng ra kết quả ấy.thanks rogp10 (rogp10) July 4, 2019, 6:55am #19 Nhan_Nguyen9: bạn cho mình hỏi tại sao n%i==0 Câu này nghĩa là “n chia hết cho i” Nhan_Nguyen9: với tại sao bạn dùng hàm sqrt vậy. mình thấy không có sqrt nó cũng ra kết quả ấy.thanks Bởi vì vượt quá sqrt tức là nguyên tố rồi. Khi p * q = n thì có p mới có q, và ngược lại. Thừa số nhỏ hơn sẽ không quá căn n vì nếu không, tích hai số sẽ lớn hơn n, mâu thuẫn. 4 Likes Nhan_Nguyen9 (Nhân Nguyễn) July 30, 2019, 8:13am #20 thank you bạn nhiều nha Trung_Rua (Trung Rùa) November 15, 2019, 10:27am #21 kt ở hàm chính là gì vậy m.n ơi? rogp10 (rogp10) November 15, 2019, 11:22am #22 Bạn vui lòng quote trực tiếp nhé 3 Likes hoangltse04739 (Hoàng) November 15, 2019, 2:30pm #23 Bạn đã return 1 lúc kiểm tra rồi thì không cần break; nữa 3 Likes Thanh_Nha (Thanh Nhã) December 8, 2019, 10:46am #24 mọi người cho em hỏi e sai chỗ nào ạ??? e chạy nó không ra kết quả ạ 8_Naf (8 NAF) December 8, 2019, 3:30pm #25 tối ưu code lại chút nè //using -std=c11 #include <stdio.h> #include <stdbool> #include <math.h> bool is_prime (int n) { if (2 == n) { return true; } //So chẵn khác 2 không phải là số nguyên tố //Số bé hơn 2 không phải là số nguyên tố if (n < 2 || 0 == n%2) { return false; } size_t end = (size_t) sqrt(n); for (size_t i = 3; i <= end; i += 2) { if (0 == n%i) { return false; } } return true; } int main() { printf("Nhap vao so nguyen n: "); int n; scanf("%d", &n); printf("\nCac so nguyen to nho hon %d la: \n", n); if (n > 2) { printf("2 "); } for (int i = 3; i < n; i += 2) { if (is_prime(i)) { printf("%d ", i); } } } 4 Likes next page → DayNhauHoc's Discord Học C++ Free? Click Blog Dạy Nhau Học Tự Học Lập Trình 83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao? Từ khóa » Thuật Toán Liệt Kê Số Nguyên Tố Bài Tập C - Liệt Kê Tất Cả Các Số Nguyên Tố Nhỏ Hơn N - Viettuts Bài 46. Liệt Kê Số Nguyên Tố Trong Mảng 1 Chiều Liệt Kê Các Số Nguyên Tố Nhỏ Hơn N Lập Trình C/C++ Hàm Liệt Kê Số Nguyên Tố Trong đoạn Từ A đến B. (a,b Là Số Tự Nhiên ... Liệt Kê Tất Cả Các Số Nguyên Tố Nhỏ Hơn Giá Trị N Nhập Từ Bàn Phím C - Bài Tập 3.8: Liệt Kê Các Số Nguyên Tố Trong đoạn [a, B] - YouTube C - Bài Tập 2.11: Liệt Kê N Số Nguyên Tố đầu Tiên - YouTube [C++] Liệt Kê Các Số Nguyên Tố Nhỏ Hơn N - Kiến Thức 24h Số Học 2 - Số Nguyên Tố, Sàng Eratosthenes - VNOI Lập Trình C++ - Liệt Kê Tất Cả Các Số Nguyên Tố Nhỏ Hơn N Thuật Toán Kiếm Tra Số Nguyên Tố Liệt Kê Các Số Nguyên Tố Nhỏ Hơn N