Code in ra 4 số nguyên tố bị lỗi

Mọi người giúp em với ạ!
Nhập vào số n và in ra màn hình 4 số nguyên tố 2 số nhỏ hơn và 2 số lớn hơn n.
Em có làm như này và có lỗi mong được chỉ bảo ạ

#include <stdio.h>
#include <math.h>
int main(){
	int n;
	printf("\n nhap so n: ");
	scanf("%d", &n);
	if(n<3){
		printf("\n  %d la sai nhap lai",n);
	}	
	int b=0;
	for(int x = 1;x<=n;++x){
		int dem=1;
		for(int i=2;i<=sqrt(x);i++){
			if (x % i == 0){
				dem++;}}

	if (dem ==1 &&x>1)
              printf("\t",x);
	}
1 Like

Lỗi gì? Lỗi khi nào? Ý tưởng của bạn là gì?

4 Likes

mình có ghi nhầm! đến đoạn ở bên thì mình không biết làm như nào để in ra 2 số nguyên tố lớn hơn n và nhỏ hơn n nữa ạ!

1 Like

vậy bạn giải thích đoạn code ở trên xem, bạn đã viết gì
và nếu cho n = 15, bạn sẽ làm gì (giải giống như toán, lấy giấy ra viết, không liên quan đến code) để ra được đáp án?

1 Like

đoạn trên mình viết chỉ in được ra các số nguyên tố nhỏ hơn n
nhưng ko biết cách để cho in ra 2 số nguyên tố lớn hơn và nhỏ hơn n ạ!

em cần xin gợi ý ạ !

1 Like

cho n = 15
bạn giải bằng tay như thế nào, hãy trình bày lên đây
nếu bạn không có khả năng giải bằng tay và trình bày được cách bạn suy nghĩ ra giấy, thì không có gì để nói nữa cả

lập trình là mô tả những công việc mà con người muốn máy tính thực hiện bằng ngôn ngữ lập trình
khi bạn chưa biết cái phần in đậm kia, thì không có gì để code

6 Likes

chỉ việc kiểm tra xem các số nhỏ hơn 15 và lớn hơn 1 xem số nào có ước là 1 và chính nó thì là số nguyên tố ạ

nếu mà nhập một số bất kì mà em mới tự học đến vòng for while thì làm sao để in ra được 2 số mà là số nguyên tố lớn hơn được số đấy ạ

1 Like

Chạy xuống* để kiếm 2 thằng nhà họ Nguyên, sau đó chạy lên* để kiếm hai thằng còn lại.
Bạn biết hai từ trên biểu diễn thế nào trong vòng lặp không? Nó có liên quan đến --++.

1 Like

Nhắc lại lần 3
Nếu bạn muốn rèn luyên (tư duy - code, kĩ năng lập trình) thì hãy làm theo như trên và trình bày lên đây, chắc chắc sẽ có những sự giúp đỡ hữu ích

Nếu bạn chỉ muốn có đáp án để submit thì nơi đây không hỗ trợ đâu

5 Likes

nếu mà bình thường thì em mở bảng số nguyên tố trong sách ra và em chỉ biết định nghĩa trong sách là số nguyên tố là số có ước là 1 và chính nó
em học trên youtube thì người ta dạy xong em lần mò bài tập, thì có bài tìm số nguyên tố thì em thử làm xong em làm kiểm tra ra số đấy là nguyên tố xong em giả sử nếu muốn tìm snt lớn hơn hay nhỏ hơn, trong trường hợp mà mình nhập vào số n đó ạ. mà em mới học đến for while em muốn thử xem nếu mà đến đấy thì có tìm được không nên em mới đăng lên đây hỏi ạ.

cho số n = 15

  1. tìm 2 số nguyên tố nhỏ hơn n, hiển nhiên là từ 1 đến n - 1. Lần lượt xét từng giá trị xem có phải là số nguyên tố không?
    1? no
    2? yes => được 1 số
    3? yes => được 2 số => xong phần nhỏ hơn
  • Cải thiện
    Nhận xét, 2 và 3 luôn là số nguyên tố nhỏ nhất, không còn số nguyên tố nào nhỏ hơn nữa, nên nếu có 2 (hoặc nhiều hơn) số nguyên tố nhỏ hơn n thì luôn luôn có số 2 và số 3.
    Nên nếu n <= 3 thì không tìm được 2 số nguyên nhỏ hơn n
  1. Tìm 2 số nguyên tố lớn hơn, hiên nhiên nó phải là n + 1, n + 2…, cứ xét tăng dần
    16? no
    17? yes => được 1 số
    18? no
    19? yes => được 2 số => xong phần lớn hơn

đáp án cuối cùng: 2 3 17 19
chỉ có vậy thôi, bạn cũng không trình bày ra được, thì code cái gì nữa
tới đây, tư duy tới đây chưa có cái gì gọi là code hay lập trình cả

tiếp tục: đưa ý tưởng/tư duy/giải pháp ở trên vào code

  • nhập n: cin >> n;
  1. Hai số nguyên tố nhỏ hơn,
  • n <= 3 thì dừng (hoặc báo lỗi hay gì đó thì đề không nói): if (n <= 3) { cout<<“khong xong roi dai vuong oi”; }
  • trường hợp còn lại (là n > 3): else { // hai so nay chac chan la 2 va 3, khoi lam gi}
  1. Tìm hai số nguyên tố lớn hơn n.
  • Như ở trên nói, số đó phải là n + 1, n + 2 …, tăng chừng nào tìm được thì thôi
i = n + 1; // bat dau tu n + 1, roi tang dan
while (chưa tìm đủ 2 số) {
     // xử lý i

    i++; // tăng i lên 1 để vòng lặp kế tiếp xử lý
}
  • làm gì với vòng while đó? Xét số i có phải nguyên tố hay không?

nếu i là số nguyên tố:

 if (i là số nguyên tố) {
   // ghi nhận
   if (đủ 2 số) {
      // dừng vòng lặp bằn lệnh break hoặc bằng cách làm cho điều kiện trong câu while trên kia sai
   }
}

nếu không phải thì không làm gì, nên cũng khỏi có thêm code gì

xong bước tìm 2 số lướn hơn thì xuất kết quả: count<<....


Hy vọng post này một phần nào đó giúp bạn cải thiện cách tư duy, cách đặt câu hỏi cũng như là thay đổi thái độ học của bạn. mãi đến cuối cùng thì bạn vẫn chưa trình bày được cái gì gọi là ý tưởng/phương pháp gì cả
Học toán, tư duy toán còn chưa xong nữa thì code cái gì, bản thân còn không biết mình muốn gì thì sao ra lệnh cho máy làm
Nói là muốn tìm số 2 nguyên tố lớn hơn và 2 số nguyên tổ nhỏ hơn n thì khác gì cái đề bài? có gì gọi là diễn giải?

Ngôn ngữ lập trình có gì?

  • nhập
  • xuất
  • biến
  • các phép tính
  • lệnh điều kiện
  • lặp

code gì đi chăng nữa thì cũng chỉ có bao nhiêu đó, nguyên tố là cái gì? nguyên tố nhỏ hơn là cái gì? tìm là cái gì? máy tính chả biết đâu

6 Likes

cin, cout vớii cả break là gì em không biết! em chỉ biết break thì em chưa có học thôi ạ. hình như theo bài giảng trên youtube thì bài sau cơ ạ. Ý của em là nếu mà mới học đến for hay while thì có đủ để làm câu kiểu như này ko đó ạ!!! sau cái của anh em mới hiểu được vòng lặp em chỉ cần chạy từ 1 đến <= 3 là có thế in được 2 số nhỏ hơn ra. còn cái phần tìm 2 số lớn hơn thì em không biết break nên không biết ạ!

ban đầu em định để vòng for chạy từ 1 đến n+1000 em nghĩ thế sẽ tìm được 2 số lớn hơn nhưng nếu nghĩ lại mà em nhập số có 4 chữ số thì chắc không được! Em cảm ơn anh ạ anh tốt quá ạ

1 Like

Thậm chí nếu không dùng while thì cũng có thể dùng for

dem = 0
for (i = n + 1; dem < 2; i++) {
   // i la so nguyên tố thì tăng biến điếm
}

bạn không cần phải chống chế làm gì cả, ở đó đã nói rất rõ, bạn có thể dừng vòng lặp bằng cách này hoặc cách khác, thậm chí là dùng for, dùng do while các kiểu, biết gì dùng đó

hơn nữa mình đã nói rất rõ ngay từ đầu, không cần bạn code, chỉ cần bạn trình bày cách bạn giải bằng tay như phần ở trên

và cuối cùng có vẻ như bạn vẫn mong đợi một cái gì đó chạy được để nộp chứ không quan tâm lắm đến những lời gợi ý
nên tới đây thì dừng vậy

5 Likes

Cách đặt câu hỏi quan trọng hơn lời giải là đây. Mình cũng sắp “nổi điên” giống @kisuluoibieng khi đọc cái chủ đề fake như này.

Vấn đề ở đây là thư giãn tí xíu mọi người hen.

2 Likes

Chắc e ms học code. Trước a cũg thế. Học mãi k hiểu
1 là do tuổi trẻ chưa hiểu sự đời.
2 là do ms tiếp xúc vs code còn nhiều lạ lẫm.
Rồi thời gian sẽ thay đổi thôi.
K sớm thì muộn ấy mà.

Nếu bài toán của e đổi thành
Nhập số tự nhiên n, tìm 2 số nguyên tố lớn hơn và 2 số nguyên tố nhỏ hơn n gần nhất và in ra kết quả.
Thì bài toán sẽ hợp lý hơn đó

Còn lập trình bài này có lẽ a lm dk.
Vì nó chỉ liên quan đến thuật toán check 1 số có phải số nguyên tố thôi mà.

Chúc e học tốt

Cảm kích vì sự nhiệt tình của bác

Em đã làm được, lúc sử dụng những lệnh mà lúc đấy học được nhưng giờ sau khi học thêm nhiều lệnh thì thấy lúc đó làm quá dài
Chắc bác kia hiểu lầm là em đã học được hết các lệnh rồi!
Em cảm ơn 2 anh nhiều ạ!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?