Đề bài: Show
mình không biết bị sai lỗi gì, mà chạy chương trình thì nó chạy liên tục luôn, có ai giúp mình ko? int main() { int N; printf("Nhap N:"); scanf("%d", & N); if (N <= 0) { printf("moi nhap so lon hon 0:"); } else { for (int i = 2; i > 0; i++) { int t = 0; for (int j = 1; j <= i; j++) { if ((i % j) == 0) t++; } { if (t == 2) for (int k = 1; k <= N; k++) printf("%d\t", i); } } } return 0; }
4 Likes
xin lỗi mình mới học, không viết chuyên nghiệp được bạn
Thanh_Nguyen_Nguy:
Vòng for sẽ lặp vô hạn. Kiem tra lại đk i 3 Likes
à, tại mình chưa nghĩ ra cái nào mà có thể khiến i hoạt động được khi thiếu đk đó
Thanh_Nguyen_Nguy:
Bạn muốn khi nào thì vòng for sẽ dừng? Thanh_Nguyen_Nguy:
Và lệnh này để làm gì? Sao lại cần nó?
Mình sửa bài của bạn nhé. 1 Like
Cảm ơn bạn, mình sửa được rồi.
mình đã sai trong lập luận logic, cảm ơn bạn đã giải thích
trên DNH có rất nhiều bài toán dạng in số nguyên tố rồi. in k số nguyên tố phía trước / sau n. code rất ngắn gọn, tường minh. Có cả sử dụng function, bạn có thể tham khảo thêm. 1 Like
Thanh_Nguyen_Nguy:
Nếu sửa cái này thành for (i = 2; i < n; i++) bạn sẽ bớt được 1 biến k; Thanh_Nguyen_Nguy:
for (j = 2; j * j < i; j++) Bạn sẽ bớt được sqrt(i) - 2 lần vòng lặp. Bạn còn có thể phát triển nó nhiều lắm
DoTran1:
Cái này là in ra những số nguyên tố bé hơn n mà. Đề bài yêu cầu in ra n số nguyên tố đầu tiên. Bác thông não giúp em với 2 Likes
Tôi xl, tôi đọc k kỹ rồi. Xl 1 Like
Dùng sàng bay vèo vèo luôn 2 Likes Home Categories FAQ/Guidelines Terms of Service Privacy Policy
#include<stdio.h> #include<conio.h> main() { int i,a,dem=0,demc=0,n,b,z; printf("Nhap so n la:"); scanf("%d",&n); printf("Nhap so a la:"); scanf("%d",&a); for(i=2;i<=a;i++) { dem=0; for(b=1;b<=a;b++) if(i%b==0) dem++; if(dem==2) { z=i; } if(demc<=n) { printf("%d ",z); } } getch(); } Mọi người xem mình bị lỗi gì ? kiến thức còn kém k biết sai chỗ nào. Khi mình chạy thì nó bị lỗi như sau: VD: n=4; a=10 KQ: 2 3 3 5 5 7 7 7 7 đáng nhẽ phải ra 2 3 5 7 chứ :))~ :))~
Code bạn chỗ này hơi rối, và mình không hiểu ý tưởng lắm: if(dem==2) { z=i; } if(demc<=n) { printf("%d ",z); }Mình có sửa qua một chút, ý tưởng của bạn thì vẫn giữ nguyên không thay đổi, mình chỉ comment cho dễ hiểu: #include<stdio.h> #include<conio.h> int main() { int i, a, dem = 0, demc = 0, n, b, z; printf( "Nhap so n la:" ); // n la so luong so nguyen to can lke scanf( "%d" , &n ); printf( "Nhap so a la:" ); // [0, a] la tap so tu nhien chua n so nguyen to scanf( "%d", &a ); for( i=2; i <= a; i++ ) { dem = 0; for( b=1; b<=a; b++) if( i % b == 0) dem++; if( dem == 2 ) // neu i la so nguyen to { printf( "%3d", i ); // in ra i demc++; // so luong so nguyen to tang len 1 } if ( demc == n ) // neu da du n so nguyen to thi thoat vong lap break; } getch(); }Nhưng cách này chưa tối ưu vì giá trị a nhập vào mình không biết là bao nhiêu để bao hàm n số nguyên tố đầu tiên cả, việc tối ưu dành lại cho bạn nhá
ý mình là thế này khi mà giá trị dem==2 tức là đã chọn được 1 số nguyên tố mình cần lưu nó bằng 1 biến đếm khác ở đây là biến demc sau đó thì m cần những biến demc đó<n rồi in nó ra ý m là như thế mong các b chỉ giáo ^^ trình độ còn hơi kém keke
cám ơn b QuangduyT nhé b code dễ hiểu lắm m hiểu r kekek :v 1 Like
#include<iostream> using namespace std; bool KTSNT(int n){ if(n<=2) return false; else for(int i=2;i<=n;i++) if(n%i==0 && n%2==0) return false; return true; } int main(){ int a,n,dem=0,count=0; do{ cout<<"nhap N và a: "; cin>>n>>a; }while(a<n); cout<<n<<" so nguyen to dau tien la: "; for(int j=2;j<=a;j++){ if(KTSNT(j)){ count+=1; } } if(count>=n){ for(int i=2;i<=a;i++){ if(KTSNT(i)){ dem=dem+1; cout<<i<<" "; if(dem==n) break; } } }else{ cout<<" rong, dl nhap sai"; } return 0; } Home Categories FAQ/Guidelines Terms of Service Privacy Policy
Trong bài tập này chúng ta sẽ thực hiện chương trình hiển thị ra màn hình n số nguyên tố đầu tiên trong Java. Đây là một dạng bài tập cơ bản khi học các ngôn ngữ lập trình, nhất là Java. Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức. Ở bài này chúng ta sẽ viết hai chương trình in số nguyên tố, chương trình đầu tiên là hiển thị ra màn hình n số nguyên tố đầu tiên (n so người dùng nhập). Chương trình thứ hai sẽ hiển thị ra màn hình 100 số nguyên tố đầu tiên. Ví dụ 1: Chương trình hiển thị n số nguyên tố đầu tiên.Trong ví dụ này, đầu tiên chúng ta sẽ yêu cầu người dùng nhập vào số n , sau đó dùng vòng lặp For xét điều kiện số nguyên tố cho n số đầu tiên, số nào thõa điều kiện thì hiển thị ra màn hình. import java.util.Scanner; class KiemTraSoNguyenTo { public static void main(String args[]) { int n; int status = 1; int num = 3; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào n số nguyên tố đầu tiên:"); n = scanner.nextInt(); if (n >= 1) { System.out.println(n+" Số nguyên tố đầu tiên là:"); System.out.println(2); } for ( int i = 2 ; i <=n ; ) { for ( int j = 2 ; j <= Math.sqrt(num) ; j++ ) { if ( num%j == 0 ) { status = 0; break; } } if ( status != 0 ) { System.out.println(num); i++; } status = 1; num++; } } } Kết quả: Bài viết này được đăng tại [free tuts .net] Ví dụ 2: Chương trình hiển thị 100 số nguyên tố đầu tiên.Để hiển thị 100 số nguyên tố đầu tiên, bạn có thể nhập n bằng 100 vào chương trình ở trên. Hoặc thực hiện như chương trình dưới đây. import java.util.Scanner; class KiemTraSoNguyenTo { public static void main(String args[]) { int n,count=0; int status = 1; int num = 3; System.out.println("100 số nguyên tố đầu tiên là:"); System.out.println(2); for ( int i = 2 ; i <=100 ; ) { for ( int j = 2 ; j <= Math.sqrt(num) ; j++ ) { if ( num%j == 0 ) { status = 0; break; } } if ( status != 0 ) { System.out.println(num); i++; count++; } status = 1; num++; } } } Kết quả: 100 số nguyên tố đầu tiên là : 2 3 5 7 11 13 17 19 23 . . . 491 499 503 509 521 523 541 Như vậy là chúng ta đã thực hiện xong chương trình hiển thị n số nguyên tố đầu tiên. Chúc các bạn thực hiện thành công!!!
|