多方法求素数(定义法、埃氏法、欧氏法)

一、概述

素数,又称质数,一个你小学到现在都十分苦恼的老朋友。

我上小学的时候,老师告诉我说把这个数用已经知道的素数从小到大一点一点试,假如说如果都不能除尽,那它就是个素数。前两天偶然辅导一个小学生的数学作业,发现几乎都使用素数表这个东西。(确实这种东西也比较玄学)

那程序如何实现的呢?主要分为三个方法:定义筛法、埃氏筛法、欧氏筛法。各有用途,大家自行理解和使用。

二、定义筛法

定义法是三种方法里比较容易理解的,它也正如它的名字所描述。

原理:根据定义来找素数。

我们来看一下代码:

bool isprime(int n)//是则返回真,不是则为假 
{
	int i=2;//1因为我们人为定义它不是素数,而且1也会陷入死循环 
	while (i<=sqrt(n)&&n%i!=0) ++i;//当它不超过n的平方根时,用n一个一个试; 
	if(i<=sqrt(n))return 0;//没经受住上述历练 
	else return 1;//通关 
}

细心的朋友可能已经发现一个问题,为什么i<=n的算数平方根???

我们来举一个简单的例子:

假如我们要求 12 这个数是不是一个素数,我们先分析 12 这个数有什么构成。

可以由1*12、2*6、或者3*4构成。我们从小往大开始一个个枚举,发现2已经可以;假如我们继续到枚举到12,发现完全没有浪费这个时间的必要。

我们可以得出以下结论,任何可以由两个数相乘得出的数,只用测试到这两个数最大中的最小就可以,然而让他们两个同时最小的就是开平方。

三、埃氏筛法

 埃氏筛法是数学家埃拉托斯特尼所发明的一种比较稳定的求素数方法,他还可以顺带记录下来沿途的素数,我个人认为有个地方还是很有意思的,这就是智慧的体现和数学的魅力。

原理:用已经有的素数筛掉未

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值