
Is Prime
Giới thiệu về kiểu bài genCode.
Nếu bạn là đã quen với việc viết hàm main(), tự nhập dữ liệu từ bàn phím và xuất dữ liệu ra màn hình, thì hôm này chúng tôi sẽ giới thiệu đến các bạn kiểu bài genCode.
Ví dụ với bài tính tổng hai số nguyên a
và b
:
Chương trình hoàn chỉnh sẽ như sau:
#include<iostream>
using namespace std;
int sum (int a, int b){
return a + b;
}
int main(){
int a, b;
cin >> a >> b;
cout << sum(a, b);
return 0;
}
Để tiết kiệm thời gian của các bạn chúng tôi sẽ chỉ yêu cầu các bạn viết hàm xử lý thôi, không cần phải viết hàm main(), ví dụ như bài ở trên các bạn sẽ chỉ thấy code mẫu là:
int sum (int a, int b){
}
Việc cần làm của bạn là viết hoàn chỉnh hàm đấy sao cho nó trả về đúng kết quả cần làm của đề ra.
Code của bạn khi chạy thử/nộp bài sẽ là:
int sum (int a, int b){
return a + b;
}
Nếu nhiều bạn thắc mắc về việc có cần thêm các thư viện không, thì vấn đề này các bạn yên tâm, chúng tôi đã thêm hầu hết các thư viện cơ bản, bạn có thể sử dụng nó mà không cần khai báo nó.
Hãy thử làm bài tập bên dưới bằng kiểu bài này nhé.
Đề bài.
Một số nguyên tố là một số tự nhiên lớn hơn 1
và không thể tạo thành từ tích của hai số tự nhiên nhỏ hơn.
Ví dụ số 2, 3, 5
được gọi là số nguyên tố
Viết một hàm xác định xem một số nguyên dương đã cho có phải là số nguyên tố hay không.
Ví dụ
- Với
n = 47
, đầu ra làisPrime(n) = true
- Với
n = 4
, đầu ra làisPrime(n) = false
Đầu vào/Đầu ra
-
[Giới hạn thời gian chạy] 0.5 seconds
-
[Đầu vào] integer n
Điều kiện tiền đề:
0 ≤ n ≤ 1000
. -
[Đầu ra] boolean
true
nếun
là số nguyên tố,false
nếu không phải.
Gợi ý:
- Kiểm tra xem
n
có chia hết cho số nào trong khoảng từ2
tới căn bậc2
củan
hay không? Nếu không thìn
là số nguyên tố, ngược lại tức làn
không phải là số nguyên tố.
Vì nếun
không chia hết cho các số từ2
đến phần nguyên căn bậc hai củan
thì cũng sẽ không chia hết cho các số từ phần tử từ phần nguyên căn bậc hai củan
đếnn - 1
.
Lý thuyết
Cách kiểm tra một số có phải một số nguyên dương n có phải số nguyên tố hay không ?
- Ta lần lượt xét các số từ
2
đếnn-1
và kiểm tra xem số đó có phải là ước của n hay không ? Nếu nó là ước của n thì ta trả về giá trịfalse
bool isPrime(int n) { if (n <= 1) return false; for (int i = 2; i <= n-1; ++i) if (n % i == 0) return false; return true; }
- Độ phức tạp :
O(n)
Bạn có thể đọc phần gợi ý để biến nó về độ phức tạp chỉ O(√n).
Hướng dẫn bài tập.
Code mẫu:
Ngôn ngữ C++:
bool isPrime(int n)
{
if (n <= 1) return false;
for (int i = 2; i <= sqrt(n); i++)
if (n % i == 0)
return false;
return true;
}
Post Comment