素数的判断算法

**

素数的判断算法:

**
代码如下:

#include<stdio.h>
#include<math.h>
void prime(int n) {
	int i = 2;
	while (n%i!=0&&i*1.0<sqrt(n)) {
		i++;
	}
	if (i*1.0 > sqrt (n))
		printf("是素数");
	else
		printf("不是素数");
	
}

void main() {
	int n = 0;
	printf("请输入你要判断的数值n:");
	scanf("%d",&n);
	prime(n);
}

分析

1.什么是素数?
素数即质数,质数(Prime number,)指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。

注:补充合数概念:大于1的自然数若不是素数,则称之为合数(也称为合成数)

2.素数的判断方法
在数学中,测试n是否为素数的最基本方法为试除法,将n除以每个大于1且小于等于n的平方根之整数m。若存在一个相除为整数的结果,则n不是素数;反之则是个素数。若是个合数n=ab(其中a与b ≠ 1),则其中一个约数a或b必定至大为(根号n) 。

3.代码分析:见代码块中。上

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
常见的大素数判断算法有试除法、费马小定理、Miller-Rabin素性测试等。其中,Miller-Rabin素性测试是一种较为高效的算法。 Miller-Rabin素性测试的原理如下: 对于一个奇数n,我们可以将其表示为n-1=2^r * d的形式,其中d为奇数。然后我们随机选择一个a∈[2, n-2],计算a^d mod n,如果结果为1或n-1,则n有可能是素数,结束测试;否则我们不断将前一项平方,即计算a^(2^k * d) mod n,直到出现某一项为n-1或者k=r-1时,结束测试。如果n是素数,则上述概率小于1/4,重复测试t次,错误的概率就会降为1/4^t。 下面是使用Python实现1024bits大素数的代码: ```python import random def Miller_Rabin(n, k=5): if n == 2 or n == 3: return True if n < 2 or n % 2 == 0: return False r, d = 0, n - 1 while d % 2 == 0: r += 1 d //= 2 for i in range(k): a = random.randint(2, n - 2) x = pow(a, d, n) if x == 1 or x == n - 1: continue for j in range(r - 1): x = pow(x, 2, n) if x == n - 1: break else: return False return True def generate_prime(bits): while True: p = random.getrandbits(bits) if Miller_Rabin(p): return p p = generate_prime(1024) print(p) ``` 在Miller-Rabin素性测试中,我们使用了随机数生成器random模块中的randint函数来生成随机的底数a。在generate_prime函数中,我们首先生成一个bits位的随机数p,然后使用Miller-Rabin素性测试对其进行判断,如果p是素数,则返回该数,否则继续生成新的随机数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值