题目描述
知识点
素数判定
结果
实现
码前思考
- 这是属于判断一个数是否为素数的题目,使用时间复杂度位 O ( N ) O(\sqrt N) O(N)的模板。
代码实现
#include "bits/stdc++.h"
using namespace std;
bool isPrime(int num){
if(num <= 1){
return false;
}else{
int sqr = (int) sqrt(1.0*num);
for(int i=2;i<=sqr;i++){
if(num%i == 0){
return false;
}
}
return true;
}
}
int main(){
int num;
while(~(scanf("%d",&num))){
if(isPrime(num)){
printf("yes\n");
}else{
printf("no\n");
}
}
return 0;
}
码后反思
为了保险起见,我们的sqr = (int) sqrt(1.0*num) + 1
是比较好的,《王道》上面说这样是为了防止double
值带来的精度的损失,所以宁愿多枚举一个数也不能少枚举一个数。- md,上面没讲清楚,此时应该写成:
要把int sqr = (int) sqrt(1.0*num)+1; for(int i=2;i<sqr;i++){ if(num%i == 0){ return false; } }
i<=sqr
改成i<sqr
; - 加油💪