网上有关“求100000以内的纯粹素数 用pascal ”话题很是火热 ,小编也是针对求100000以内的纯粹素数 用pascal寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您 。
LZ知道筛法求素数吗?是一种高效的求2~n以内素数的算法 ,具体如下:
用筛法求素数的基本思想是:把从1开始的 、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数 ,然后去掉它的倍数。依次类推,直到筛子为空时结束 。以下是找120以内素数的算法模拟:
纯粹素数是这样定义的:一个素数,去掉最高位,剩下的数仍为素数 ,再去掉剩下的数的最高位,余下的数还是素数。这样下去一直到最后剩下的个位数也还是素数。
求纯粹素数的代码如下:
var i,j,n,t,code:longint;
s:string; prime:array[2..1000000]of boolean;begin
fillchar(prime,sizeof(prime),true); readln(n); for i:=2 to trunc(sqrt(n)) do if prime[i] then beginfor j:=2 to n div i do
prime[i*j]:=false; end; //经过如此,每一个素数对应的数组元素都是true; for i:=2 to n do if prime[i] then begint:=i;
while t>0 do
begin
str(t,s); delete(s,1,1); val(s,t,code); //这里用了一个小技巧 ,运用字符串函数 str 和 val 删去了 t 的最高位 。 if not prime[t] then break;end;
if t<=0 then write(i,' ');
end; readln;end.
在附件中看一下效果吧!
满意别忘了采纳哦~ 手打很辛苦,但是LZ的题让我也获益匪浅。
用筛法求1-1000之间的素数
方法1.查质数(素数)表。
方法2.依次用2、3、5 、7、11……这些素数做除数去除这个数,看它能不能被这些素数整除 ,如果发现了能整除的,那么它就不是素数;如果一直除到用接近这个数的平方根的素数做除数,仍都不能整除 ,那么这个数就是素数(质数)。
如179,与它的平方根最接近的质数(素数)是13 。依次用2、3 、5、7、11、13做除数去除179,都不能整除 ,所以,179是素数。
筛选法的规律:(以1~1000内的素数少选为例)
我们知道素数的定义:只能被1和他本身整除的是素数,那这样看的话,只要有一个既不是1又不是这个数本身的数把这个数整除了 ,就可以说明这个数不是素数了。例如 5是素数,因为5只能被5和1整除,6不是素数 ,,因为6除了能被1和6整除,还能被2和3整除 。试想一下 ,我们要判断6是不是素数,需不需要循环到6的时候才进行判断呢,不需要 ,因为2和3都是他的因子,我们在循环到2的时候,找到2的所有倍数 ,如4,6,8,10 ,12等等,这些数都至少有2这个因子,因此可以判定它们都不是素数了。而由于4是2的倍数 ,在循环到2的时候已经判定4不是素数了,所以我们不需要在挖掉4的倍数了,直接跳过4 ,来到5,挖掉5的所有倍数,然后是6 ,6在值钱是2的倍数被挖掉了,所以跳过6,来到7.....一直循环到最后一个数字为止 ,这个时候就是上面7步中说的,剩下没有被挖掉的(挖掉的含义就是把这个数置0)也就是非0的数字就是素数了。
不知道我说的你能不能听懂 。希望对你有帮助吧。
关于“求100000以内的纯粹素数 用pascal”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
本文来自作者[碌葡米]投稿,不代表祖恩号立场,如若转载,请注明出处:https://www.zone-science.com/a/660.html
评论列表(3条)
我是祖恩号的签约作者“碌葡米”
本文概览:网上有关“求100000以内的纯粹素数 用pascal”话题很是火热,小编也是针对求100000以内的纯粹素数 用pascal寻找了一些与之相关的一些信息进行分析,如果能碰巧解...
文章不错《求100000以内的纯粹素数 用pascal》内容很有帮助