js,javascript中判断一个数是否是素数

javascript 专栏收录该内容
267 篇文章 4 订阅

这个面试的时候 还是有可能问道的童鞋呢,了解了解听好了
这个也是初中数学中的知识
首先哈 1 不是素数也不是什么 那个叫什么 素数的相反叫什么 我也忘了
我记得好像叫做合数 好像是的

好久搞过数学了,这可不行快忘完了 哎哎 闲着没事要去 复习复习 初中数学了
素数是 除了一和它本身之外没有其他的 约数的 数是素数
1.我们先来第一版的判断素数的条件

function isSu(num){
	if(num==1){
		alert(‘你数学是体育老师教的吗?给我传过来一个1);
		return false;
	}
	if(num==2||num==3){
		return true;   // 3 和 2 确实是 素数哈
	}
}
  1. 这样先完成了 基础的条件判断 往下接着走 首先 能被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;
	}
}
  1. 然后停下来继续走 好像这样 虽然把大于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;
}

关注我持续更新前端知识

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值