Hero Circle Shape
Hero Moon Shape
Hero Right Shape
tokenpocket最新版app|100内的质数有哪些数

tokenpocket最新版app|100内的质数有哪些数

  • 作者: tokenpocket最新版app
  • 2024-03-12 15:08:01

百度知道 - 信息提示

百度知道 - 信息提示

百度首页

商城

注册

登录

网页

资讯

视频

图片

知道

文库

贴吧采购

地图更多

搜索答案

我要提问

百度知道>提示信息

知道宝贝找不到问题了>_

该问题可能已经失效。返回首页

15秒以后自动返回

帮助

 | 意见反馈

 | 投诉举报

京ICP证030173号-1   京网文【2023】1034-029号     ©2024Baidu  使用百度前必读 | 知道协议 

百度知道 - 信息提示

百度知道 - 信息提示

百度首页

商城

注册

登录

网页

资讯

视频

图片

知道

文库

贴吧采购

地图更多

搜索答案

我要提问

百度知道>提示信息

知道宝贝找不到问题了>_

该问题可能已经失效。返回首页

15秒以后自动返回

帮助

 | 意见反馈

 | 投诉举报

京ICP证030173号-1   京网文【2023】1034-029号     ©2024Baidu  使用百度前必读 | 知道协议 

质(素)数表: 1 - 100

质(素)数表: 1 - 100

首页

|

菜单

|

宣传

|

协助改进翻译

质(素)数表

Next123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100Next

质数表是一种方便的显示质数分布的方式。 质数显示在绿色的地方。点击一个数去查看更多详细信息,包括合数。质数表显示的数高达10000。使用 质数计算器,以找出任意一个数是否是质数,以及质因数分解器,以计算任意合数的因数。

支持的函数和运算

数学工具

导数计算

不定积分计算器

定积分计算器

极限计算器

级数计算器

方程求解器

表达式化简器

因式分解计算器

表达式计算器

反函数

泰勒展开计算器

矩阵计算器(其他运算)

矩阵计算器(加、减、乘)

函数图像绘制工具

平面图形计算器

立体图形计算器

质数

分解质因数工具

斐波那契数

伯努利数

欧拉数生成器

复数计算器

阶乘计算器

伽马函数计算器

组合数计算器

分数计算器

统计工具

LaTeX 公式编辑器

数字的性质

0 / 12

例如:

3628800,

9876543211,

12586269025

化学工具

适用于网站的数学工具

选择语言:

Deutsch

English

Español

Français

Italiano

Nederlands

Polski

Português

Русский

中文

日本語

한국어

数字帝国 - 众人皆宜的强大数学工具 | 联系站长

使用本网站即表示您接受《使用条款》和《隐私政策》。

© 2024

numberempire.com

版权所有

 

 

100以内的质数记忆法_规律

100以内的质数记忆法_规律

新闻

体育

汽车

房产

旅游

教育

时尚

科技

财经

娱乐

更多

母婴

健康

历史

军事

美食

文化

星座

专题

游戏

搞笑

动漫

宠物

无障碍

关怀版

100以内的质数记忆法

2020-10-12 18:30

来源:

爱吃苹果的优乐酱

原标题:100以内的质数记忆法

质数又称“素数”,是指只有1和它本身两个正因数的自然数。2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97,共计25个。

一、 规律记忆法

首先记住2和3,而2和3两个质数的乘积为6。100以内的质数,一般都在6的倍数前、后的位置上。如5、7、11、13、19、23、29、31、37、41、43, 只有25、35、49、55、65、77、85、91、95这几个6的倍数前后位置上的数不是质数,而这几个数都是5或7的倍数。

由此可知:100以内6的倍数前、后位置上的两个数,只要不是5或7的倍数,就一定是质数。根据这个特点可以记住100以内的质数。

二、 分类记忆法

我们可以把100以内的质数分为五类记忆。

第一类:20以内的质数,共8个:2、3、5、7、11、13、17、19。

第二类:个位数字是3或9,十位数字相差3的质数,共6个:23、29、53、59、83、89。

第三类:个位数字是1或7,十位数字相差3的质数,共4个:31、37、61、67。

第四类:个位数字是1、3或7,十位数字相差3的质数,共5个:41、43、47、71、73。

第五类:还有2个质数是79和97。

100以内质数及歌谣

二三五七和十一,(2,3,5,7,11)

十三后面是十七,(13,17)

展开全文

十九二三二十九,(19,23,29)

三一三七四十一,(31,37,41)

四三四七五十三,(43,47,53)

五九六一六十七,(59,61,67)

七一七三七十九,(71,73,79)

八三八九九十七。(83,89,97)

规律一:看区间质数的个数

以10个数为一个区间看质数的个数,呈4,4,2,2,3,2,2,3,2,1规律。

·

规律二:看每个质数的个位数

100以内的质数个位数有以下几种:1,2,3,5,7,9,共6种情况。

返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。

阅读 ()

推荐阅读

100以内的质数表、背诵口诀及在奥数中的两个小应用 - 知乎

100以内的质数表、背诵口诀及在奥数中的两个小应用 - 知乎首发于海淀普娃的小升初之路切换模式写文章登录/注册100以内的质数表、背诵口诀及在奥数中的两个小应用自由的艾瑞卡​北京海淀妈妈/家有俩娃六年级姐姐&三年级弟弟/小升初进行时100以内的质数表:共25个质数的定义:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除,则这个数是质数。质数又叫做“素数”。与质数相对的是“合数”。100以内一共有25个质数。100以内质数的背诵口诀:二三五七和十一十三后面是十七十九二三二十九三一三七四十一四三四七五十三五九六一六十七七一七三七十九八三八九九十七2是所有质数中唯一的偶数,所以:如果两个质数相加的结果是奇数,说明其中必定有一个质数是2(因为奇数+奇数=偶数);如果三个质数相加的结果是偶数,说明其中必定有一个质数是2。这个知识点的应用经常在奥数题中出现,例如下面这道题:质数数列也会出现在奥数或神测的数字推理题目中,例如:这个数列拆分一下就是:10+2,20+3,30+5,40+7,( ),60+13,可以看出第二个加数构成质数数列,所以答案是 50+11 = 61。 发布于 2022-04-08 21:32质数表小学奥数小升初​赞同 19​​2 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录海淀普娃的小升初之路在希望与失望之间匍

如何记住100以内的质数? - 知乎

如何记住100以内的质数? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册数学趣味数学素数如何记住100以内的质数?关注者14被浏览12,556关注问题​写回答​邀请回答​好问题 1​1 条评论​分享​12 个回答默认排序知乎用户这里提供一些自创的小方法,而且都是采用黙表的方法(必须首先默认 1 不是素数):首先,我们都必须快速把所有单数和 2 以一种平常方式写出来,也即列表如下:列表【方法Ⅰ】可以采用简单的口诀来进行筛选,一共有 3 句:① 【九十五不是;下一个才是】②【 3113 ,第 3 行写个 3 ,全部加 6 】③【删掉显然,删掉被 3 整除】对于①,是说: 95 不是素数,下一个才是素数,下一个当然是采用奇数的观点的下一个,所以是 97 。这时,选出了一个素数。看上去一句话选一个数,很不值得,实际上“九十五不是”这句话会用两遍:把“九十五”这三个字可以拆分成两样东西,“九”和“十五”,这样的话,这个数字同样审定着 1 ~ 20 的筛选,也就是将列表的 9 和 15 删去(因为九十五不是):【九十五不是;下一个才是】这样,综合起来,①就筛选出了以下三行的素数:①接着是使用 ②【 3113 ,第 3 行写个 3 ,全部加 6 】:这句话会让我们列出以下的表(每一句话都是打竖写):3113,第3行写个3,全部加6“全部加 6 ”的意思是说,前两句话写完前两列,而第 3 列则是在第 1 列的基础上“全部加 6 ”而弄出。由于前面已经筛选过 1~20 ,而这里的列表是 4 行,因此是接下去的 20~60 。可以看到,每一行都标记出相应的素数:②最后是 ③【删掉显然,删掉被 3 整除】,这里是完全使用排除法:也就是 60~90 ,易知带有个位 5 和 77 (个位、十位相同)是显然要删除的:删掉显然然后再“删掉被 3 整除”:删掉被 3 整除这样就删除完毕,也即排除法完成,得到③的所有素数筛选:③因此,使用这 3 步,就可以筛选出列表中的所有素数:1~100素数【方法Ⅱ】同样,也是首先列表:列表这时,我们定义一个简单的东西:定义也就是把打竖写的 1\,\,\,2\,\,\,2 定义为一个 ↓ ,从而 ↑ 就自然是指 2\,\,\,2\,\,\,1 ;而 +2 写在了最上面,所以是第一列的第一个数字 +2 处理即可,得到 3\,\,\,2\,\,\,2 。所以,使用上图的右边所示,易知可以写出:小列表这个小列表可以帮助我们基于1~100 的列表规律来进行【素数的圈出】:首先,我们很自然地把 2 所在列和 5 所在列全部排除(自然也知 2 和 5 本身会被保留),那么图中被标记的前 3 列可以使用小列表的提示来圈出:1、找出每一列的第一个素数,分别是 11 , 3 , 7 .2、观察这 3 列的每一列,从上往下看,会发现连续颜色都是被“ 1 个合数(白色格子)隔开”,那么使用小列表的提示,则知第 1 列使用 1\,\,\,2\,\,\,2 ,因此是“选连续的 1 个”,跳过 1 个白色格子;“选连续的 2 个”,跳过 1 个白色格子;“选连续的 2 个”。同理,对于第 2 列,使用 3\,\,\,2\,\,\,2 ,则是:“选连续的 3 个”,跳过 1 个白色格子;“选连续的 2 个”,跳过 1 个白色格子;“选连续的 2 个”。对于第 3 列,使用 2\,\,\,2\,\,\,1 ,则是:“选连续的 2 个”,跳过 1 个白色格子;“选连续的 2 个”,跳过 1 个白色格子;“选连续的 1 个”。3、那么经过这样一个简单过程,就会看到,我们只剩下“ 97 ”和最后一列(个位数是 9 的列)没有判断,“ 97 ”需要硬记下来是素数,而最后一列我们可以统一来进行判断:把它们的每一个用 3 和 7 去除,如果能被 3 和 7 其中一个整除,就是合数;如果都不行,就是素数,非常简单。这采用的是一种素数筛法,即对于任何一个自然数 n ,只需要判断 n 有没有以\sqrt{n} 之内的素数作为因数,若都没有,n 就是素数。基于以上方法,也一样可以快速列出1~100 的素数表(素数会被圈出):被圈出的素数【方法Ⅲ】由于【方法Ⅱ】中提到了一种简单的素数筛法,即对于任何一个自然数 n ,只需要判断 n 有没有以\sqrt{n} 之内的素数作为因数,若都没有,n 就是素数。而且我们又知,我们一眼就能看出个位为 2 和 5 的两位数都是合数,所以我们只需要判断这些以外的数字;由于最大的 n=100 ,所以只需要判断 \sqrt{n}=\sqrt{100}=10 以内的素因数: 2 , 3 , 5 , 7 .同时,由于“我们一眼就能看出个位为 2 和 5 的两位数都是合数”,这代表了我们其实不用关注素因数 2 和 5 ,所以【最终只需要看素因数 3 和 7 】.这个方法比较适合用于【单个数字的素性判断】,例如,给出 1~100 的随便一个数字,例如“ 37 ”,我们很容易就能知道,3 和 7 都不是 37 的素因数,所以 37 是一个素数。又例如,“ 91 ”,由于 91÷7=13 ,所以 7 是 91 的素因数,从而知 91 不是素数。但使用此方法判断出一整个列表,会非常慢,所以列表的话,建议使用【方法Ⅰ】或【方法Ⅱ】;单个数字的素性判断,则建议使用【方法Ⅲ】。这些都是一些很简单的方法,也都是我随便看看(看着素数表)就弄出的记忆方法。使用文字写下来自然是挺多字的,但实际上操作起来是非常简单的,所以只要知道怎么操作,上述文字自然可以忘掉,并不是文字越多就代表越复杂。编辑于 2022-06-18 16:31​赞同 3​​添加评论​分享​收藏​喜欢收起​知乎用户魔法软糖原创:如何用一句话背100个质数 记熟规律后能迅速解析出任意区间的质数,直接背出来。 一句话记100个,还可根据区间快速定位,来判断某数是否为质数。原理 任何大于十的质数尾数只有四种情况,1,3,7,9。 质数的末位数字组合只有十六种,我们可以用1个字符来表示它, 这样 100 个数字区间便被压缩为 10 个字符。约定 * 每 10 位是一个区间,例如 20~29,170~179㈠ 当区间一个质数时 用 1,3,7,9 表示。例如:90开头的质数只有97, 记为 7。㈡ 当区间两个质数时 用 0,2,4,5,6,8 表示。〖2=1+3〗,〖4=1+7〗,〖5=3+7〗,〖6=3+9〗,〖8=7+9〗,〖0=1+9〗 。 例如:30开头的质数有31,37, 记为 4。 4=尾数 (1+7)÷2㈢ 当区间三个质数时 用 A,B,C,D 表示仅 1,3,7,9 不是。例如:40开头的质数有41,43,47, 记为 D。㈣ 当区间四个质数时 用〖+〗表示,读作加,当全不是质数时用〖-〗表示,读作减,起始质数用〖*〗表示,读作新一千以内的质数口诀表〖百内〗*+64D 64C67│〖一百〗+37B9 4561+│〖二百〗-1A61 46423│〖三百〗7D-48 67667│〖四百〗091C6 7D970│〖五百〗6-2-4 76476│〖六百〗4A-1D 61531│〖七百〗09763 40377│〖八百〗91+9- A37D-│〖九百〗70974 37434│背熟以上十句话,就掌握了1000以内的所有质数分布。大体相当于一首五言律诗。 新家柳寺低,楼市吸牛气。 夹上奇碧酒,丝舞柳腰佳。富姨啊离异,室友事儿酸。 七弟复试吧,牛气留留级。您就要C牛,七弟救麒麒。 留父二复试,骑牛似骑牛。屎啊覆一地,流一屋三遗。 灵酒气流扇,四邻酸戚戚。酒衣加酒剑,鞍山欺地府。 麒麟救骑士,三妻是善事。例1:一百以内质数****************** *+64D 64C67 读作 新加六四地,六四C六七 第一位*表示起始质数2,3,5,7(特殊约定) 第二位+表示全都有,即11,13,17,19 第三位6表示有两个,6=(3+9)÷2,即23,29 第四位4表示有两个,4=(1+7)÷2,即31,37 第五位D表示仅D没有,ABCD对应1379,也就是没有9,即41,43,47 ...... 第十位是奇数,最简单,表示只有7,即97 ...... 背熟后尝试在心中解读字符含义,即可快速记忆质数分布。例2:再讲解一遍口诀(如果懂了可跳过)****************** 以二百开头的口诀:-1A61 46423 第一位-表示[20X]没有质数 第二位1表示[21X]仅有X为1,即211 第三位A表示[22X]仅有X不为1,即223,227,229 第四位6表示[23X]有两个质数,6=3,9,即233,239 (偶数和数字5的代表含义:123,147,369,789,357,109)质数判断****************** 例: 请问553是不是质数? 答:请先回忆第5+1句话,第5+1个字。 第六句口诀是6-2-4 76476。 那么第六字是7,也就是说550开头的只有557为质数, 所以553不是质数。区间质数统计****************** 本口诀还能对某区间数字的质数个数速算。 例: 请问270~330区间内有多少个质数? 解:先回忆二百开头末尾三字是423, 三百开头三字是7D-, 然后奇数算1,偶数和5算2,字母算3,正负号*算4 个数为2+2+1+1+3+4=13个编辑于 2022-12-06 04:46​赞同 10​​添加评论​分享​收藏​喜欢

百度知道 - 信息提示

百度知道 - 信息提示

百度首页

商城

注册

登录

网页

资讯

视频

图片

知道

文库

贴吧采购

地图更多

搜索答案

我要提问

百度知道>提示信息

知道宝贝找不到问题了>_

该问题可能已经失效。返回首页

15秒以后自动返回

帮助

 | 意见反馈

 | 投诉举报

京ICP证030173号-1   京网文【2023】1034-029号     ©2024Baidu  使用百度前必读 | 知道协议 

100以内的素数表 - 百度文库

100以内的素数表 - 百度文库

首页

文档工具

更多

搜索文档

新客立减13元

客户端

看过

登录

100以内的素数表

免费

5分

(超过98%的文档)

3.3W阅读

740下载

2页

100以内的素数表 

2、3、5、7 11、13、17、19 23、29 31、37 41、43、47 53、59 61、67 71、73、79 83、89 97 

    推荐两种记忆方法,可以把两种方法结合起来(找到素数表中相似的部分)。 (一)口诀: 

二、三、五、七、一十一,(表示:2、3、5、7、11) 十三、十七、一十九。(表示:13、17、19) 二三九,三一七, (表示:23、29、31、37) 五三九,六一七。 (表示:53、59、61、67) 

四一三七,七一三九,(表示:41、43、47、71、73、79) 八三八九,九十七 。 (表示:83、89、97) 

    

质数表-质数计算器-质数查询

质数表-质数计算器-质数查询

质数表

什么是质数

质数又称素数,大于1且只能被1和自身整除的自然数(即正整数)为质数。0和1不是质数,最小质数是2,没有最大质数,质数有无限个,目前发现的最大质数是梅森素数2^74207281-1(被称为M74207281)。

质数计算器

质数计算器可以快速方便的查询一个数字是否为质数,查询数字范围:2-9999999999。

查询

质数表大全

50以内的质数表

50以内的质数共有15个,分别是:

23571113171923293137414347

50-100以内的质数表

100以内的质数共有25个,其中50-100以内的质数共有10个,分别是:

53596167717379838997

100-200以内的质数表

200以内的质数共有46个,其中100-200以内的质数共有21个,分别是:

101103107109113127131137139149151157163167173179181191193197199

200-300以内的质数表

300以内的质数共有62个,其中200-300以内的质数共有16个,分别是:

211223227229233239241251257263269271277281283293

300-500以内的质数表

500以内的质数共有95个,其中300-500以内的质数共有33个,分别是:

307311313317331337347349353359367373379383389397401409419421431433439443449457461463467479487491499

500-1000以内的质数表

1000以内的质数共有168个,其中500-1000以内的质数共有73个,分别是:

503509521523541547557563569571577587593599601607613617619631641643647653659661673677683691701709719727733739743751757761769773787797809811821823827829839853857859863877881883887907911919929937941947953967971977983991997

1000-10000以内的质数表

10000以内的质数共有1229个,其中1000-10000以内的质数共有1061个,分别是:

10091013101910211031103310391049105110611063106910871091109310971103110911171123112911511153116311711181118711931201121312171223122912311237124912591277127912831289129112971301130313071319132113271361136713731381139914091423142714291433143914471451145314591471148114831487148914931499151115231531154315491553155915671571157915831597160116071609161316191621162716371657166316671669169316971699170917211723173317411747175317591777178317871789180118111823183118471861186718711873187718791889190119071913193119331949195119731979198719931997199920032011201720272029203920532063206920812083208720892099211121132129213121372141214321532161217922032207221322212237223922432251226722692273228122872293229723092311233323392341234723512357237123772381238323892393239924112417242324372441244724592467247324772503252125312539254325492551255725792591259326092617262126332647265726592663267126772683268726892693269927072711271327192729273127412749275327672777278927912797280128032819283328372843285128572861287928872897290329092917292729392953295729632969297129993001301130193023303730413049306130673079308330893109311931213137316331673169318131873191320332093217322132293251325332573259327132993301330733133319332333293331334333473359336133713373338933913407341334333449345734613463346734693491349935113517352735293533353935413547355735593571358135833593360736133617362336313637364336593671367336773691369737013709371937273733373937613767376937793793379738033821382338333847385138533863387738813889390739113917391939233929393139433947396739894001400340074013401940214027404940514057407340794091409340994111412741294133413941534157415941774201421142174219422942314241424342534259426142714273428342894297432743374339434943574363437343914397440944214423444144474451445744634481448344934507451345174519452345474549456145674583459145974603462146374639464346494651465746634673467946914703472147234729473347514759478347874789479347994801481348174831486148714877488949034909491949314933493749434951495749674969497349874993499950035009501150215023503950515059507750815087509951015107511351195147515351675171517951895197520952275231523352375261527352795281529753035309532353335347535153815387539353995407541354175419543154375441544354495471547754795483550155035507551955215527553155575563556955735581559156235639564156475651565356575659566956835689569357015711571757375741574357495779578357915801580758135821582758395843584958515857586158675869587958815897590359235927593959535981598760076011602960376043604760536067607360796089609161016113612161316133614361516163617361976199620362116217622162296247625762636269627162776287629963016311631763236329633763436353635963616367637363796389639764216427644964516469647364816491652165296547655165536563656965716577658165996607661966376653665966616673667966896691670167036709671967336737676167636779678167916793680368236827682968336841685768636869687168836899690769116917694769496959696169676971697769836991699770017013701970277039704370577069707971037109712171277129715171597177718771937207721172137219722972377243724772537283729773077309732173317333734973517369739374117417743374517457745974777481748774897499750775177523752975377541754775497559756175737577758375897591760376077621763976437649766976737681768776917699770377177723772777417753775777597789779378177823782978417853786778737877787978837901790779197927793379377949795179637993800980118017803980538059806980818087808980938101811181178123814781618167817181798191820982198221823182338237824382638269827382878291829382978311831783298353836383698377838783898419842384298431844384478461846785018513852185278537853985438563857385818597859986098623862786298641864786638669867786818689869386998707871387198731873787418747875387618779878388038807881988218831883788398849886188638867888788938923892989338941895189638969897189999001900790119013902990419043904990599067909191039109912791339137915191579161917391819187919992039209922192279239924192579277928192839293931193199323933793419343934993719377939193979403941394199421943194339437943994619463946794739479949194979511952195339539954795519587960196139619962396299631964396499661967796799689969797199721973397399743974997679769978197879791980398119817982998339839985198579859987198839887990199079923992999319941994999679973

热门查询数字:

79602152644999893764424749381434937636189651624451867101342745736606133082943555254566827318014296439341

友情链接

元素周期表

圆周率

单位换算

查天气

拼音字母表

英文缩写大全

免费考试真题

163手游网

Copyright ©2022 质数表 质数 质数计算器 www.zhishubiao.com 版权所有

站点地图 皖ICP备2023021797号

100以内的质数表合集-百度文库

100以内的质数表合集-百度文库

首页

文档工具

更多

搜索文档

新客立减13元

客户端

看过

登录

第 1 页 共 3 页 

100以内的质数表 

 

1、一个数,如果只有1和它本身两个因数,这样的数叫做质数(或素数)如2,3,5,7都是质数。 

2、 一个数,如果除了1和它本身还有别的因数,这样的数叫做合数。如4,6,15,49都是合数。 

1不是质数,也不是合数。 

3、 奇数 奇数 = 奇数 奇数 + 偶数 = 奇数, 偶数 偶数 = 偶数 偶数 + 偶数 = 偶数奇数 偶数 = 偶数 奇数 + 奇数 = 偶数 

1、一个数,如果只有1和它本身两个因数,这样的数叫做质数(或素数)如2,3,5,7都是质数。 

2、 一个数,如果除了1和它本身还有别的因数,这样的数叫做合数。如4,6,15,49都是合数。 

1不是质数,也不是合数。 

3、 奇数 奇数 = 奇数 奇数 + 偶数 = 奇数, 偶数 偶数 = 偶数 偶数 + 偶数 = 偶数奇数 偶数 = 偶数 奇数 + 奇数 = 偶数 

1、一个数,如果只有1和它本身两个因数,这样的数叫做质数(或素数)如2,3,5,7都是质数。 

2、 一个数,如果除了1和它本身还有别的因数,这样的数叫做合数。如4,6,15,49都是合数。1不是质数,也不是合数。 

100以内的质数 - 懵懂的菜鸟 - 博客园

100以内的质数 - 懵懂的菜鸟 - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

懵懂的菜鸟

Stay hungry,Stay foolish.

导航

博客园

首页

新随笔

联系

管理

公告

100以内的质数

  质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。

  求解一个算法,我们首先要知道它的数学含义.依据这个原则,首先我们要知道什么是素数.; 素数是这样的整数,它除了表示为它自己和1的乘积以外,无论他表示为任何两个整数的乘积。

找素数的方法多种多样。

1 #include

2 #include

3

4 void main(){

5 int i,j;

6 for (i=2;i<100;i++){

7 int flag=0;

8 for (j=2;j

9 if(i%j==0) flag=1;//若存在其他因子,flag=1

10 }

11 if(flag==0) printf("%d-",i);//flag==0则表示不存在除了1和本身的其他因子。可以输出。

12 }

13 }

 

 

  1:是从2开始用“是则留下,不是则去掉”的方法把所有的数列出来(一直列到你不想再往下列为止,比方说,一直列到10,000)。第一个数是2,它是一个素数,所以应当把它留下来,然后继续往下数,每隔一个数删去一个数,这样就能把所有能被2整除、因而不是素数的数都去掉。在留下的最小的数当中,排在2后面的是3,这是第二个素数,因此应该把它留下,然后从它开始往后数,每隔两个数删去一个,这样就能把所有能被3整除的数全都去掉。下一个未去掉的数是5,然后往后每隔4个数删去一个,以除去所有能被5整除的数。再下一个数是7,往后每隔6个数删去一个;再下一个数是11,往后每隔10个数删一个;再下一个是13,往后每隔12个数删一个。就这样依法做下去。

但是编程我们一般不采用上面的方法,并不说这中方法计算机实现不了,或者说实现算法比较复杂。因为它更像一个数学推理。最后我们也给一个算法。

下面我们介绍几种长用的编程方法。

       2:遍历2以上N的平方根以下的每一个整数,是不是能整除N;(这是最基本的方法)

  其实只要从 2 一直尝试到√x,就可以了。估计有些网友想不通了,为什么只要到√x 即可?  简单解释一下:因数都是成对出现的。比如,100的因数有:1和100,2和50,4和25,5和20,10和10。看出来没有?成对的因数,其中一个必然小于等于100的开平方,另一个大于等于100的开平方。至于严密的数学证明,用小学数学知识就可以搞定,俺就不啰嗦了。

       3:遍历2以上N的平方根以下的每一个素数,是不是能整除N;(这个方法是上面方法的改进,但要求N平方根以下的素数已全部知道)       4:采用Rabin-Miller算法进行验算;

例如:N=2^127-1是一个38位数,要验证它是否为素数,用上面几个不同的方法:

验算结果,假设计算机能每秒钟计算1亿次除法,那么算法2要用4136年,算法3要用93年,算法4只要不到1秒钟!(这些数据是通过计算得到)

 

 

下面我们分别实现上面的三种算法:

以下算法我们不涉及内存溢出,以及大数字的问题。如果测试数字超过2^32,发生内存溢出,你需要自己使用策略解决这个问题,在这里只讨论32位机有效数字算法。

1:// 算法0:是从2开始用“是则留下,不是则去掉”的方法把所有的数列出来

1 // 最后数组中不为0的数字就是要查找的素数。

2 void PrimeNumber0()

3 {

4 // int time ::GetTickCount();

5 // cout << "start time:" << time << endl;

6

7 int Max[MAX_NUMBER]; // 在栈上分配,栈上空间要求一般都在2M之间,

8 // 如果你需要更大空间,请在堆上申请空间(就是通过malloc,new来申请).

9 memset(Max,0,MAX_NUMBER);

10 for(int i = 0 ; i < MAX_NUMBER; ++i)

11 {

12 Max[i] = i;

13 }

14 int cout = 0;// 记录当前i的位置

15

16 // 遍历整个数组

17 for(i = 1; i < MAX_NUMBER; ++i)

18 {

19 if(Max[i] != 0 )// 如果数据不为0,说明是一个素数

20 {

21 int iCout = i;

22 int j = Max[i];// 记录数组中数组位的数字,以便设置

23 while((iCout+=j) < MAX_NUMBER)

24 {

25 // 把不是素数的数位在数组中置为0

26 Max[iCout] = 0;

27 }

28 ++cout;

29 }

30 }

31

32 // int time ::GetTickCount();

33 // cout << "end time:" << time << endl;

34 }

 

 

2:这个算法可以修改成为,验证一个给定数字是否是一个素数。

1 // 因为我们讨论多个算法,所以我们把每个算法都单独

2 // 写在一个或多个函数内。这些函数并不要求输入值和返回值

3 // 如果你需要这些结果,可以自己修改。

4

5 // 算法1:遍历2以上N的平方根以下的每一个整数,是不是能整除N;

6 void PrimeNumber1()

7 {

8 // int time ::GetTickCount();

9 // cout << "start time:" << time << endl;

10

11 int Max[MAX_NUMBER/2]; // 在栈上分配,栈上空间要求一般都在2M之间,

12 // 如果你需要更大空间,请在堆上申请空间(就是通过malloc,new来申请).素数的个数很少

13 // 所以没有必要申请和所求数字同样大小的空间。

14 memset(Max,0,MAX_NUMBER);

15 Max[0] = 2;// 放入第一个素数,有人说2不是素数,如果你是其中一员,就改成3吧

16 int cout = 1;// 记录素数个数

17

18 // 挨个数进行验证

19 bool bflag = true;

20 for(int i = 3; i < MAX_NUMBER; ++i)

21 {

22 bflag = true;

23 // 需要是使用数学库(math.h)中sqrt

24 int iTemp = (int)sqrt((float)i);// 强制转换成int类型,有的人在这里使用i+1就是为了增加sqrt的精度

25 // 没有特殊函数,你也可以使用int iTemp = (int)sqrt(i)+1;来提高进度

26 for (int j = 2; j < iTemp; ++j)

27 {

28 if(i%j == 0)// 求余,如果为0说明,可以整除,不是素数。

29 {

30 bflag = false;

31 break;

32 }

33 }

34 // 经过验证是素数,放入数组。

35 if(bflag)

36 {

37 Max[cout++] = i;

38 }

39 }

40

41 // int time ::GetTickCount();

42 // cout << "end time:" << time << endl;

43

44 }

 

 

3:这个方法是上面方法的改进,但要求N平方根以下的素数已全部知道

1 // 算法2:遍历2以上N的平方根以下的每一个素数,是不是能整除N;

2 // (这个方法是上面方法的改进,但要求N平方根以下的素数已全部知道)

3 void PrimeNumber2()

4 {

5 // int time ::GetTickCount();

6 // cout << "start time:" << time << endl;

7

8 int Max[MAX_NUMBER/2]; // 在栈上分配,栈上空间要求一般都在2M之间,

9 // 如果你需要更大空间,请在堆上申请空间(就是通过malloc,new来申请).素数的个数很少

10 // 所以没有必要申请和所求数字同样大小的空间。

11 memset(Max,0,MAX_NUMBER);

12 Max[0] = 2;// 放入第一个素数,有人说2不是素数,如果你是其中一员,就改成3吧

13 int cout = 1;// 记录素数个数

14

15 // 挨个数进行验证

16 bool bflag = true;

17 for(int i = 3; i < MAX_NUMBER; ++i)

18 {

19 bflag = true;

20 // 需要是使用数学库(math.h)中sqrt

21 int iTemp = (int)sqrt((float)i);// 强制转换成int类型,有的人在这里使用i+1就是为了增加sqrt的精度

22 // 没有特殊函数,你也可以使用int iTemp = (int)sqrt(i)+1;来提高进度

23 /////////////////////////////////////////////////////////////////////////////////

24 // 修改的是这里以下的部分

25 for (int j = 0; j < cout; ++j)

26 {

27 if(i%Max[j] == 0)// 求余,如果为0说明,可以整除,不是素数。

28 {

29 bflag = false;

30 break;

31 }

32 }

33 // 修改的是这里以上的部分

34 //////////////////////////////////////////////////////////////////////////////////

35 // 经过验证是素数,放入数组。

36 if(bflag)

37 {

38 Max[cout++] = i;

39 }

40 }

41

42 // int time ::GetTickCount();

43 // cout << "end time:" << time << endl;

44

45 }

 

 

4:采用Rabin-Miller算法进行验算,Rabin-Miller算法是典型的验证一个数字是否为素数的方法。判断素数的方法是Rabin-Miller概率测试,那么他具体的流程是什么呢。假设我们要判断n是不是素数,首先我们必须保证n 是个奇数,那么我们就可以把n 表示为 n = (2^r)*s+1,注意s 也必须是一个奇数。然后我们就要选择一个随机的整数a (1<=a<=n-1),接下来我们就是要判断 a^s=1 (mod n) 或a^((2^j)*s)= -1(mod n)(0<=j

 

1 // 算法3:采用Rabin-Miller算法进行验算

2 //首先选择一个代测的随机数p,计算b,b是2整除p-1的次数。然后计算m,使得n=1+(2^b)m。

3

4 //(1) 选择一个小于p的随机数a。

5 //(2) 设j=0且z=a^m mod p

6 //(3) 如果z=1或z=p-1,那麽p通过测试,可能使素数

7 //(4) 如果j>0且z=1, 那麽p不是素数

8 //(5) 设j=j+1。如果jp-1,设z=z^2 mod p,然后回到(4)。如果z=p-1,那麽p通过测试,可能为素数。

9 //(6) 如果j=b 且z<>p-1,不是素数

10

11 // 判定是否存在 a^s=1 (mod n) 或a^((2^j)*s)= -1(mod n)(0<=j

12

13 bool Witness(int a,int n)

14 {

15 // 解释一下数学词汇:

16 // ceil求不小于x的最小整数,函数原型extern float ceil(float x);求得i的最大值

17 // log计算x的自然对数,函数原型extern float log(float x);

18 long i,d=1,x;

19 for (i=(int)ceil(log((double)n-1)/log(2.0))-1;i>=0;--i)

20 {

21 x=d;

22 d=(d*d)%n;

23 if ((1==d) && (x!=1) && (x!=n-1))

24 {

25 return 1;

26 }

27 if ((n-1)&(1<0))

28 {

29 d=(d*a)%n;

30 }

31 }

32 return (d!=1);

33

34 }

35

36 // 参数n,是要测定的数字,s是要内部测试的次数。

37 bool Rabin_Miller(int n,int s)

38 {

39 for (int j = 0;j < s; ++j)

40 {

41 int a = rand()*(n-2)/RAND_MAX + 1;// 获得一个随机数1<=a<=n-1

42 if (Witness(a,n))// 利用这个随即数和n进行判断对比,只要有一次返回true,就说明n不是一个素数

43 {

44 return false;

45 }

46 }

47 return true;// 通过验证是一个素数

48 }

49

50 // 算法3:采用Rabin-Miller算法进行验算

51 // 这个算法是求大素数使用的。所以你的必须想办法支持大数字运算,

52 // 不然极易造成内存访问失效,我在我的机子上,MAX_NUMBER=10000时就会出现问题,1000就没有问题

53 void PrimeNumber3()

54 {

55

56 int Max[MAX_NUMBER/2];// 在栈上分配,栈上空间要求一般都在2M之间,

57 // 如果你需要更大空间,请在堆上申请空间(就是通过malloc,new来申请).素数的个数很少

58 // 所以没有必要申请和所求数字同样大小的空间。

59 int cout = 0;// 记录素数个数

60 memset(Max,0,MAX_NUMBER/2);

61

62 for(int i = 2; i < 1000; ++i)

63 {

64 if(Rabin_Miller(i,20))

65 {

66 Max[cout++] = i;

67 }

68 }

69 }

 

  Miller-Rabin算法是目前主流的基于概率的素数测试算法,在构建密码安全体系中占有重要的地位。通过比较各种素数测试算法和对Miller-Rabin算法进行的仔细研究,证明在计算机中构建密码安全体系时, Miller-Rabin算法是完成素数测试的最佳选择。通过对Miller-Rabin 算 法底层运算的优化,可以取得较以往实现更好的性能。随着信息技术的发展、网络的普及和电子商务的开展, 信息安全逐步显示出了其重要性。信息的泄密、伪造、篡改 等问题会给信息的合法拥有者带来重大的损失。在计算机中构建密码安全体系可以提供4种最基本的保护信息安全的服 务:保密性、数据完整性、鉴别、抗抵赖性,从而可以很大 程度上保护用户的数据安全。在密码安全体系中,公开密钥 算法在密钥交换、密钥管理、身份认证等问题的处理上极其有效,因此在整个体系中占有重要的地位。目前的公开密钥 算法大部分基于大整数分解、有限域上的离散对数问题和椭 圆曲线上的离散对数问题,这些数学难题的构建大部分都需 要生成一种超大的素数,尤其在经典的RSA算法中,生成的素数的质量对系统的安全性有很大的影响。目前大素数的生成,尤其是随机大素数的生成主要是使用素数测试算法,本 文主要针对目前主流的Miller-Rabin 算法进行全面系统的分析和研究,并对其实现进行了优化。

posted on

2017-09-16 22:58 

懵懂的菜鸟 

阅读(3063) 

评论(0) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

Powered by:

博客园

Copyright © 2024 懵懂的菜鸟

Powered by .NET 8.0 on Kubernetes