方法一:判断2之后,就可以判断从3到sqrt(n)之间的奇数了,无需再判断之间的偶数,时间复杂度O(sqrt(n)/2)。
方法二:大于等于5的质数一定和6的倍数相邻。因此在5到sqrt(n)中每6个数只判断2个,时间复杂度O(sqrt(n)/3)。比方法一能稍微快一点。
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
bool isPrime1(ll num) {
if (num == 2) return true;
if (num == 1 || num % 2 == 0) return false;
for (long long i = 3; i*i <= num; i += 2) if (num % i == 0) return false;
return true;
}
bool isPrime2(ll num){
if(num==2 || num==3) return true;
if(num==1 || num%6!=1 && num%6!=5) return false;
for(int i=5; i*i<=num; i+=6) if(num % (i) == 0 | num % (i+2) == 0) return false;
return true;
}
int main(){
ll n;
cin>>n;
if(isPrime1(n)) cout<<"yes";
else cout<<"no";
return 0;
}