/* 埃拉托斯特尼_筛法,ca26a_demo.txwtech20200126 标准库 bitset应用实例 “筛法”,用来查找质数(素数,只能被1和自身整出的数),早在两千年前就被希腊数学家埃拉托斯特尼(Eratosthenes)发现了。它的原理是什么呢?其实非常简单,花一分钟你就能明白。2,3,5,7,11. 用于寻找到很大的质数进行加密。几百位的质数,880000,6位就是88w. 先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。 第二个数2是质数留下来,而把2后面所有能被2整除的数都划去,“划去”就是把二进制位1变成0。 2后面第一个没有划去的数是3,把3留下来,再把3后面所有能被3整除的数划去。 3后面第一个数没有划去的数是5,把5留下来。 再把5后面所有能被5整除的数都划去. 这样一直做下去,就会把不超过N的全部合数都筛掉。留下的就是不超过N的全部质数。
因为希腊人把数写在涂腊的板上,没要划去一个数,就在上面记以小点, 寻求质数的工作完毕后,这许多小点就像一个筛子,所以就形象的把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。 */
/* 埃拉托斯特尼_筛法,ca25a_demo.txwtech20200126
标准库 bitset应用实例
“筛法”,用来查找质数(素数,只能被1和自身整出的数),早在两千年前就被希腊数学家埃拉托斯特尼(Eratosthenes)发现了。它的原理是什么呢?其实非常简单,花一分钟你就能明白。2,3,5,7,11.
用于寻找到很大的质数进行加密。几百位的质数,880000,6位就是88w.
先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。
第二个数2是质数留下来,而把2后面所有能被2整除的数都划去,“划去”就是把二进制位1变成0。
2后面第一个没有划去的数是3,把3留下来,再把3后面所有能被3整除的数划去。
3后面第一个数没有划去的数是5,把5留下来。
再把5后面所有能被5整除的数都划去.
这样一直做下去,就会把不超过N的全部合数都筛掉。留下的就是不超过N的全部质数。
因为希腊人把数写在涂腊的板上,没要划去一个数,就在上面记以小点,
寻求质数的工作完毕后,这许多小点就像一个筛子,所以就形象的把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。
*/
#include
#include //标准库
#include //sqrt
using std::cout;
using std::endl;
int main()
{
int const max_number(100);//定义一个常量,比max_number=100,方式速度快。
int const max_test((int)sqrt((double)max_number));//参数转型double,结构转型int.
//定理:非质数的特性,合数的特性:
//任何非质数至少有一个因数不会大于它的平方根。
//如:所有小于100的非质数,至少有一个小于10的因数
std::bitset numbers;//101个0
numbers.set();//设置为101个1;
numbers[1] = 0;
//for (int i(1); i != 100; i++)
for (int i(1); i != max_test; i++)
{
if (numbers[i])
{
//筛掉倍数作用方法1:2的倍数
//for (int j = i * 2; j < max_number + 1; j += i)
//筛掉倍数作用方法2:i的平方
for (int j (i * i); j < max_number + 1; j += i)
{
numbers[j] = 0;//把所有相关倍数置0
}
}
}
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?