素数判断
第一次的想法:
让它爆搜一遍不就好了 爆搜大法好爆搜大法好
具体实现就是让数n从2开始模,一直模到n-1,如果都不能被整除,那就是素数紧扣定义
//判断是否是素数1
#include <iostream>
using namespace std;
int main() {
cout << "please inpout a number.";
int m;
cin >> m;
for (int i = 2; i < m; ++i)
if (m%i == 0) {
cout << m << " isn't a prime\n";
return 1;
}
cout << m << " is a prime\n";
return 0;
}
这么复杂,那来进行下简单优化:
如果一个数有因子的话,那么在它的平方根数以内就应该有,否则就没有因子。例如66的平方根在8与9之间,因为66不是素数,,则它一定有比8还小的因子,我们知道66的因子是2、3、6等
那我们就可以这样写了
for (int i = 2; i < sqrt(m); ++i){
if (m%i == 0) {
cout << m << " isn't a prime\n";
return 1;
}
本次初级素数判断就先到这里
有没有感觉到循环挺浪费时间的呢
那去想想有什么方法能够进一步降低时间复杂度