Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.

Đề bài:

Viết chương trình C nhập vào số nguyên dương N, xuất ra màn hình N số nguyên tố đầu tiên. (Ví dụ N=5, xuất ra màn hình 2 3 5 7 11)

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

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.
Thanh_Nguyen_Nguy:

for(int i=2; i>0; i++)

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 đó

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.
Thanh_Nguyen_Nguy:

khiến i hoạt động được khi thiếu đk đó

Bạn muốn khi nào thì vòng for sẽ dừng?

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.
Thanh_Nguyen_Nguy:

for (int k = 1; k <= N; k++) printf("%d\t", i)

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é.
Tự so sánh 2 bài xem khác nhau chỗ nào rồi tìm ra lỗi sai.

#include <stdio.h> int main() { int n; do { printf("Nhap n:\n"); scanf("%d",&n); if (n<=0) printf("moi nhap so lon hon 0:"); } while (n<= 0); printf("%d số nguyên tố đầu tiên:\n",n); int k=1; for (int i = 2;; i++) { if (k>n) break; int t = 0; for (int j = 1; j <= i; j++) if ((i % j) == 0) t++; if (t == 2) { printf("%d\t", i); k++; } } return 0; }

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

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.
Thanh_Nguyen_Nguy:

for(int i=2;; i++)

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;
Nếu bước nhảy của i là 2 (i lẻ) bạn sẽ bớt được 1 nửa vòng lặp

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.
Thanh_Nguyen_Nguy:

for(int j=1; j<=i; j++)

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

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.
DoTran1:

Nếu sửa cái này thành for (i = 2; i < n; i++)

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

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.

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

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.

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á

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.

ý 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.

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.

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]

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.

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!!!

Xuất n số nguyên tố đầu tiên với n>0 nhập từ bàn phím.