c++ - 以下函数的时间复杂度是多少?
问题描述
#include <iostream>
using namespace std;
bool isPrime(int n){
if(n == 1 || n == -1)
return false
else if (n ==2 || n == 3)
return true;
else if((n+1)%6 == 0 || (n-1)%6 == 0)
return true;
return false;
}
int main()
{
int n{0};
cin >> n;
cout << isPrime(n) << endl;
return 0;
}
isPrime() 函数的时间复杂度是多少,检查数字是否为素数是正确的解决方案吗?
解决方案
它只进行少量可分性检查,没有循环或递归,因此它只是O (1) 并且不是正确的素数检查。
第三次检查意义不大。如果一个数与 6 的倍数相差 1,为什么它会是素数?我的意思是它恰好适用于 5 和 7,适用于 11 和 13,以及适用于 17 和 19,但适用于 25。25 与 24 相差一个,但不是素数。这就像将 π 计算为 22/7 一样——这是一个不错的第一个近似值,但它显然不是正确的公式。
推荐阅读
- swift - 在 SwiftUI 中使用 List 随机填充行
- sql - sqlite 匹配数字
- javascript - 如何使用 Javascript 防止浮动和负输入?
- python - 按音频中的顺序检测多个音频?
- sql-server - SSIS 进入睡眠状态,并行执行其中一个包
- copy - 使用 TightVNC 后,无法在 Windows 应用程序之间复制/粘贴
- javascript - 在返回拆分和映射中获得额外的子弹
- android - TextInputLayout/TextInputEditText 在提示颜色替换后导致异常
- c++ - 如何将用 Golang 编写的应用程序作为 Windows 服务运行
- python - 加载 XGBoost 模型并使用预测时出错