30/09/2018, 16:25

Tìm số nguyên tố trong đoạn a,b chỉ dùng lệnh rẽ nhánh và vòng lặp?

Mọi người giúp e với “Tìm số nguyên tố trong đoạn a,b chỉ dùng lệnh rẽ nhánh và vòng lặp”…nếu viết hàm thì đơn giản r…nhưng đề như vậy thì e suy nghĩ 4 ngày rồi viết code vẫn không chạy.

TTmagic viết 18:26 ngày 30/09/2018
Số nguyên tố: Số nguyên tố là số tự nhiên chỉ chia hết cho 1 và chính nó. Ngoài ra nó không chia hết cho bất cứ số nào khác. Số 0 và 1 không được coi là số nguyên tố. - Theo wiki Số 2 là số nguyên tố chẵn duy nhất. Cấu trúc ở dạng C: int soNguyenTo(int soA) { if (soA < 2) return 0; for (int i = 2; i <= sqrt((float)soA); i ++) { if (soA%i==0) { return 0; } } return 1; } Định nghĩa : Do người dùng tự tạo. Có thể có nhiều…
X viết 18:41 ngày 30/09/2018
#include <iostream>
using namespace std;
int main()
{
	int a, b, i, j, flag;
	cin >> a >> b; // nhap a va b.
	for(i=a+1; i<b; ++i)
	{
		flag=1;
		for(j=2; j<=i/2; ++j)
		{
			if(i%j==0)
			{
				flag=0;
				break;
			}
		}
		if(flag==1)
			cout << i << "  ";
	}

	return 0;
}
Hala Madrid Hữu Ước viết 18:34 ngày 30/09/2018

mọi người làm rồi sub hộ mình xem sao bài này cũng đơn giản mà lại ko submit đc nhỉ:

spoj.com

SPOJ.com - Problem PNUMBER

...

Sơn viết 18:34 ngày 30/09/2018
uses crt;
var prime:array[2..10000] of boolean;{bieu thi xem moi mot phan tu co chi so i thi i co la nguyen to khong}
    i,j,N,sN:integer;
BEGIN
        clrscr;
        write('Nhap N=');
        readln(N);

        {Dat tat ca cac gia tri cua mang prime ve true}
        for i:=2 to N do
                prime[i]:=true;

        sN:=trunc(sqrt(N));

        for i:=2 to sN do
        Begin
                if(prime[i]=true) then{Neu i la so nguyen to hoac chua bi danh dau}
                Begin
                        {Tim boi dau tien cua i}
                        j:=i*i;
                        {Tat ca cac boi cua i se bi danh dau khong phai la nguyen to}
                        while(j<=N) do
                        Begin
                                prime[j]:=false;
                                {Tim boi tiwp theo cua i}
                                j:=j+i;
                        End;
                End;
        End;

        {In ra cac so nguyen to}
        for i:=2 to N do
        Begin
                if prime[i]=true then
                        write(i:5);
        End;


        readln;
END.

Đây là thuật toán sàng Eratosthenes nhé: https://vi.wikipedia.org/wiki/Sàng_Eratosthenes

Nguyễn Văn Vương viết 18:37 ngày 30/09/2018

Theo mình như thế này
-Cho người dùng nhập vào khoảng a,b ( a !=b ) và ( a >b )
-Xây dựng 1 hàm kiểm tra số nguyên tố theo kiểu bool,đúng thì trả về true,sai trả về bool
-Làm 1 vòng lặp bắt đầu từ a,kết thúc tại b ( có thể lấy cả a và b tùy theo yêu cầu ),trong vòng lặp kiểm tra từng số có phải số nguyên tố bằng hàm trên không,có thì xuất nó ra,không thì bỏ qua xét phần tử khác
-Kết thúc chương trình :))

P/s: 2 số a,b bạn lúc làm bạn nên để sẵn là 0 và 10 đễ dễ kiểm tra fix lỗi
Trân trọng.

Nguyen Gia Huy viết 18:27 ngày 30/09/2018
   #include <iostream>
    using namespace std;
    int main(){
            int a,b;
            cin >> a >> b;
            for (int i=a; i<=b; i++){
                    int dem=0;
                    for (int j=1; j<=i; j++)
                            if (i % j ==0) dem++;
                    if (dem==2) cout << i << endl;
            }
    }
Sơn viết 18:27 ngày 30/09/2018

for(j=2; j<=i/2; ++j)

Em dùng i=2 đến sqrt(i) được không anh?

Bài liên quan
0