质数判断(试除法,分解质因数法)
Posted 一只特立独行的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了质数判断(试除法,分解质因数法)相关的知识,希望对你有一定的参考价值。
试除法
时间复杂度: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;
}
以上是关于质数判断(试除法,分解质因数法)的主要内容,如果未能解决你的问题,请参考以下文章