这个面试的时候 还是有可能问道的童鞋呢,了解了解听好了
这个也是初中数学中的知识
首先哈 1 不是素数也不是什么 那个叫什么 素数的相反叫什么 我也忘了
我记得好像叫做合数 好像是的
好久搞过数学了,这可不行快忘完了 哎哎 闲着没事要去 复习复习 初中数学了
素数是 除了一和它本身之外没有其他的 约数的 数是素数
1.我们先来第一版的判断素数的条件
function isSu(num){
if(num==1){
alert(‘你数学是体育老师教的吗?给我传过来一个1’);
return false;
}
if(num==2||num==3){
return true; // 3 和 2 确实是 素数哈
}
}
- 这样先完成了 基础的条件判断 往下接着走 首先 能被2整除的一定不是 素数了
这下可以继续添加条件了
function isSu(num){
if(num==1){
alert(‘你数学是体育老师教的吗?给我传过来一个1’);
return false;
}
if(num==2||num==3){
return true; // 3 和 2 确实是 素数哈
}
if(num%2==0){
return false;
}
}
- 然后停下来继续走 好像这样 虽然把大于2 的偶数 排除掉了 但是很多奇数 也不是素数哈 比如 15 21 35 81 等等
这样 我们可以进行判断了 首先看能被 3整除吗 因为3是最小的质数了
能被其他素数整除的一定不是 素数了 如果不能被 3 整除的话 就 看能被 5 整除吗 依次类推
然后 我们就又得到了一个判断条件了
function isSu(num){
if(num==1){
alert(‘你数学是体育老师教的吗?给我传过来一个1’);
return false;
}
if(num==2||num==3){
return true; // 3 和 2 确实是 素数哈
}
if(num%2==0){
return false;
}
var floor=3;
while(num>floor){
if(num%floor==0){
return false;
}else{
floor+=2;
}
}
return true;
}
这样 我们测试了 几个 11 17 29 好像都可以了
这样 终于可以完工了 这个时候大佬过来了 小赵你在干什么呢
我在做判断一个数是不是素数 看看我写的如何
大佬看完之后 ,说 你考虑得挺全面的 不过还能再次优化一下
首先一个数字是不是一定能被它的平方根 整除!!!!!!
那么你的循环条件 num >floor 是不是范围太大了 浪费时间
其实没有一个floor 加到 那个数字的 平方根哪里的
我们举一个例子 首先把这个数字 不是偶数 因为偶数已经被你上面的 整除2给排除
就拿 25 来说把 25的平方根是 5
所以 3+2 =5 这个时候 循环条件就应该中止了
但是你的循环条件 确实让人家 加到 25再停止 是不是浪费的时间 加大了好几倍
你这个时间复杂度 应该是 n*n了
听了大佬的话 我醍醐灌顶啊
这样第四版的判断就来了
function isSu(num){
if(num==1){
alert(‘你数学是体育老师教的吗?给我传过来一个1’);
return false;
}
if(num==2||num==3){
return true; // 3 和 2 确实是 素数哈
}
if(num%2==0){
return false;
}
var floor=3,sqr=Math.sqrt(num);
while(sqr>=floor){
if(num%floor==0){
return false;
}else{
floor+=2;
}
}
return true;
}
关注我持续更新前端知识