JavaScript判断一个数是否为质数/素数

JavaScript 同时被 2 个专栏收录
2 篇文章 0 订阅
1 篇文章 0 订阅

 JavaScript判断一个数是否为质数/素数

所谓素数,又称为素数,即自然数中只能被1和它本身整除的数。反之,除了1和它本身外还能被其他数整数的数称之为合数。特别说明的是0和1既不是质数也不是合数。

这里将介绍JavaScript中判断一个数是否为质数的两种方法:

1、我们知道小于等于3的质数只有2和3,因此这里以3做一个分隔判断是否为质数,大于3时从2开始到给定数值减1循环判断是否能整除给定的数值,如果能整除则给的数值不是质数,返回false,反正是质数,返回true。

function isPrime1(num) {
	if(num <= 3) {
		return num > 1;
	}
	for(let i = 2; i < num; i ++) {
		if(num % i == 0) {
			return false;
		}
	}
	return true;
}

2、这里先对质数做一个分析:

首先给出结论:设n为质数, 则当n > = 3时, 都有4 * x - 1 == n 或者 4 * x + 1 == n 。(x = 1, 2, 3, ...)

分析过程:由于4 * x 不是质数,因为它能被4整除,4 * x + 2 也不是质数,因为它能被2整除,只剩下4 * x + 1 和 4 * x + 3 (4 * x - 1),即一个数n如果大于等于3且是一个质数,那么它一定在4 * x的两侧,即4 * x - 1 == n 或者 4 * x + 1 == n (x = 1, 2, 3, ...)

当然这里的数值不一定是4,只要是能判断质数与这个值的关系就可以,例如当选择的数值是6时也可以得到大于等于3的质数在6的倍数两侧,选择的值较小的时候,那么对应的可能需要做的判断就越少,也就是循环里取余时需要做的判断就越少,但同时也会增加循环的次数,选择的值较大的时候,那么对应的可能需要做的判断就越多,也就是循环里取余时需要做的判断就越多,但同时也能减少循环的次数。这样处理的目的是加快运算的速度,即在进行循环取余判断的时候减少循环的次数。

function isPrime2(num) {
	if(num <= 3) {
		return num > 1;
	}
	if(num % 4 != 1 && num % 4 != 3) {
		return false;
	}
	for(let i = 3; i <= Math.round(Math.sqrt(num)); i += 4) {
		if(num % i == 0 || num % (i + 2) == 0) {
			return false;
		}
	}
	return true;
}

结语:这里给出的两种方式思维和效率上跨越可能比较大,都还有相应可以改进的地方。例如第一种方式在循环判断的时候可以先取num的平方根进行循环,能减少一倍以上的循环次数;第二种方式中数值选用6也是近乎一样的代码,但也能减少相应的循环次数。

 

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

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值