Nhờ mọi người kiểm tra giúp chương trình tìm số nguyên tố trong dãy

Đề bài:

Bài làm:

#include<bits/stdc++.h>

using namespace std;
long long a[1000001], n;
void nhap() {
    for (long long i = 1; i <= n; i++) cin >> a[i];
}
bool KTNT(long long n) {
}
int main() {
    cin >> n;
    nhap();
    if (n > 2)
        for (long long i = 2; i <= sqrt(n); i++)
            if (n % i == 0) return false;
    for (long long i = 1; i <= n; i++)
        if (KTNT(a[i])) cout << a[i];
    return 0;
}

Bạn “tham khảo” từ nguồn nào thế!?

Đây là đoạn kiểm tra số nguyên tố.
Không để vào hàm KTNT(), mà để vào main() rồi cho KTNT() “ở không”.

Mảng A có lượng phần tử tối đa là 10e9 (1,000,000,000 - một tỷ). Nếu tạo mảng 8 tỷ byte (long long) thì không khả thi, nhưng nếu tạo mảng nhỏ quá thì không đủ (bạn chỉ cho mảng có 1,000,001 phần tử).

Giải pháp là nhập đến đâu thì kiểm tra luôn đến đó (không lưu vào mảng) và in ra ngay số đó nếu là SNT.

Còn vấn đề mình thấy nhiều bạn gặp phải: cho vòng lặp mảng chạy từ 1 thay vì từ 0. Dựa vào đó mà khai báo “lố” thêm 1 phần tử.

6 Likes

Đoạn bool là mình lỡ cắt xuống phần main () mà chưa kịp xóa í ==

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