快速判断一个数是不是素数(质数)

朴素的方法:判断从2到sqrt(n)是否有数可以与其整除。(课本都有)
下面介绍一个更快的方法:
质数有一个分布规律——大于等于5的质数一定和6的倍数相邻。栗子:5和7,11和13。
由此进行剪枝,达到优化的效果。

Code
#include<iostream>
#include<cmath>
using namespace std;
int prime(int num)   //判断素数 
{
	if (num == 1)
		return 0;
	if (num == 2 || num == 3)
		return 1;
	if (num % 6 != 1 && num % 6 != 5)
		return 0;
	int tmp = sqrt(num);
	for (int i = 5; i <= tmp; i += 6)
		if (num % i == 0 || num % (i + 2) == 0)
			return 0;
	return 1;
}
int main()
{
	int n;
	cin >> n;
	if (prime(n)) cout << "这个数是素数" << endl;
	else cout << "这个数不是素数" << endl;
}
### 回答1: 我可以为你提供几种方法来快速确认一个是不是质数:1. 使用质数定理,即如果一个能被2或更多的质数整除,则它不是质数;2. 使用质数表,如果一个质数表中,则它是质数;3. 用暴力方法,例如从2开始,逐个试除该,如果都不能整除,则它是质数。 ### 回答2: 要快速确认一个是不是质数,可以采用以下方法: 1. 判断是否小于等于1,若是,则不是质数。 2. 若为2或3,则是质数。 3. 若为偶,即能被2整除的,则不是质数。 4. 进行素数检测时,只需判断从2到该的平方根之间的是否能整除该。因为如果一个可以被大于其平方根的整除,那么必定也可以被小于其平方根的整除。 5. 利用排除法可减少检验的次。先判断是否能被2或3整除,然后遍历从5开始的每个不小于6的连续自然判断是否能被6的两侧整除(即是否是6n±1),若能则不是质数,否则是质数。 6. 通过以上方法若无法确定,则可采用更高级的算法,如Miller-Rabin算法或AKS素数判定算法来确认质数。 以上是一些常用的方法来快速确认一个是否是质数。根据具体情况,可以根据的大小和需求选择适合的方法进行判断,提高判定的效率。 ### 回答3: 要快速确认一个是否是质数,可以使用以下方法: 1. 判断是否小于2:如果这个小于2,那么它不是质数。 2. 判断是否能被2整除:如果这个是偶且不等于2,那么它不是质数。因为质数只能被1和它自身整除,而偶可以被2整除。 3. 判断是否能被小于等于它平方根的整除:遍历从2到这个的平方根的所有,如果其中任何一个可以整除它,那么它不是质数。这是因为,如果一个可以被大于它平方根的整除,那么它也一定可以被小于它平方根的整除。 如果经过以上三个步骤,都没有判断出这个是非质数,那么可以确认它是一个质数。 这些步骤的时间复杂度较低,可以在较短的时间内快速判断一个是否是质数。当然,在处理大时,可能需要更高效的算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值