写一个C++程序,判断一个正整数N是否为素数。对于N,你的程序在最坏情况下的时间复杂度是多少?
时间: 2024-09-29 21:14:04 浏览: 35
判断一个数是否为质数
判断一个正整数N是否为素数,可以采用著名的“试除法”算法,也称为埃拉托斯特尼筛法(Sieve of Eratosthenes)的一个简化版本。这个算法的基本思想是从2开始,逐个检查N是否能被小于它的数整除,如果找到任何一个因子,那么N就不是素数。
下面是一个简单的C++程序示例:
```cpp
#include <iostream>
using namespace std;
bool isPrime(int N) {
if (N <= 1) {
return false;
}
for (int i = 2; i * i <= N; i++) { // 最坏情况的时间复杂度是O(sqrt(N))
if (N % i == 0) {
return false;
}
}
return true;
}
int main() {
int N;
cout << "请输入一个正整数:";
cin >> N;
if (isPrime(N)) {
cout << N << " 是素数。" << endl;
} else {
cout << N << " 不是素数。" << endl;
}
return 0;
}
```
在上述程序中,最坏情况发生在N是一个合数时,需要检查到其平方根,因此时间复杂度是O(sqrt(N))。这是因为如果N有一个大于sqrt(N)的因子,那么另一个因子一定小于sqrt(N),所以无需检查超过该范围的数。
阅读全文