1、 普通试除法
这种思想应该从名字就看得出来,我们把一个数的所以可能的因子都枚举出来
一个一个判断是否可以被整除,如果被整除了说明其不是质数:
主程序:
#include<bits/stdc++.h>
using namespace std;
int n;
bool pd(int n)
{
if(n==1) return false; //1不是质数
if(n==2) return true; //2是质数
for(int i=2;i<=n;i++)
{
if(n%i==0) //具有不止一个因子
{
return false;
}
}
return true;
}
int main()
{
}
这样判断单独一个质数的时间是O(n)
如果题目要求筛出 n 以内的指数
那么时间复杂度为:
只要 n > 就会超时
2、简化试除法
刚才我们的试除法是从1~n来枚举质因子的
但是这样太慢了,我们只用枚举 之内的数就可以了
这个自己算一下就知道为什么了:
一个数可以拆成
其中肯定有一个数小,或者是等,所以只用枚举到 就行了
#include<bits/stdc++.h>
using namespace std;
int n;
bool pd(int n)
{
if(n==1) return false; //1不是质数
if(n==2) return true; //2是质数
for(int i=2;i*i<=n;i++)
{
if(n%i==0) //具有不止一个因子
{
return false;
}
}
return true;
}
int main()
{
}
这样,我们将速度提升到了