试除法
时间复杂度:O(sqrt(n))
思路:
当一个数d满足d|n(d整除n的意思)时,(n÷d)|n也一定成立。于是我们只需要枚举2到sqrt(n)的数就可以判断n是否是一个质数。
代码:
#include<iostream>
using namespace std;
bool judge(int n){
for(int i=2;i<=n/i;i++){
if(n%i==0) return false;
}
return true;
}
int main(){
int n;
cin>>n;
if(judge(n)){
printf("Yes\n");
}else{
printf("No\n");
}
}
分解质因数法
时间复杂度:O(sqrt(n))
思路:
将一个数进行分解质因数,如果有质因数,则可以判断。但是这个方法一般是用来对n分解质因数。
代码:
#include<iostream>
using namespace std;
void solve(int n){
for(int i=2;i<=n/i;i++){
if(n%i==0){
//第一个可以整除n的数一定是质数
int s=0;//记录该质因子的指数
while(n%i==0){
n/=i;
s++;
}
printf("%d %d",i,s);
}
}
if(i!=1){
//i==1说明i被完全整除
//i!=i,输出大于sqrt(n)的质因子,最多有一个
printf("%d 1",n);
}
}
int main(){
int n;
cin>>n;
solve(n);
return 0;
}