当前位置:首页 » 操作系统 » 筛数算法

筛数算法

发布时间: 2022-04-12 07:53:35

c语言入门筛选素数算法

我试过了,楼主的算法思想是正确的,只不过程序中出现了三个问题。一楼(bhtzu)提到的是一个,我就不说了。其次,下面的语句应该放在第二个for循环中。
if(j>sqrt(i))
{a[i]=true;
for(x=i+i;x<=n;x=x+i)
a[x]=false;
}
最后,就是if(i%j==0)下面的两个语句应该用{}(大括号括住)。改完这些就成了。

Ⅱ excel如何筛选数据进行计算

举个例子:

意思是:

当E8>=0.9,采用红色部分,即算法A --- 这个你已经掌握

关键是同时还有一个含义是,当E8<0.9,采用绿色部分算法,即算法B或者C

因此,绿色部分的先决条件已经包括:E8<0.9

那么,绿色部分的含义就是:

当E8>=0.85,且E8<0.9,采用算法B

当E8<0.85(这时必然也小于0.9),采用算法C。

因此,以此类推,你就可以继续写出公式其他部分了对吗?

Ⅲ C语言中筛选法是怎么考虑的,就是分几个步骤考虑筛选出素数

先解释一下筛选法的步骤:<1> 先将1挖掉(因为1不是素数)。<2> 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。<3> 用3去除它后面的各数,把3的倍数挖掉。<4> 分别用4、5…各数作为除数去除这些数以后的各数。上述操作需要一个很大的容器去装载所有数的集合,只要满足上述条件,即2的N次方的全部置0,3的N次方的全部置0,4的N次方的全部置0.。。。一直到这个数据集合的末尾,这样一来不为0的数就是素数了,然后按下标在里面进行查找就好了筛选法程序如下 #includeint main() { int x[100001]; int temp,n, i; //初始化数组 for(i=0;i<100001;i++) x[i]=0; //初始化数组完成 /* 预计结果, 数组中质数为0,其它为1 */ x[0]=x[1]=1;//因为 0和1不能通过计算得到,所以只能手工置1 ,1即不是合数也不是质数for(i=2;i<100001;i++) {//循环数组中的每个数 if(x[i]==0){//如果该数所存的值为0,即第一次接触此数 temp=2*i;//将它的二倍,及n倍(要小于100000) ,都置为1,因为这些数都能被i整除 while(temp<=100000) { x[temp]=1; temp+=i; } } } scanf("%d",&n); while(n != 0) { if(x[n]==0) printf("素数\n"); else printf("合数\n"); scanf("%d",&n); } return 0; }如果你觉得这个方法不好理解,你可以用上面他们写的那些常规算法,但是数字过大的话,算起来是很慢的

Ⅳ c语言编程 素数筛选

用筛法求100以内的素数:

#include<stdio.h>

int main()

{

int a[101],i,j;

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

a[i]=1;

for(i=2;i<=10;i++)

for(j=i+i;j<=100;j+=i)

a[j]=0;

printf("100以内的素数: ");

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

if(a[i])printf("%d ",i);

printf(" ");

getch();

return 0;

}

Ⅳ 筛子目数怎么计算

可用:`分割法'计算。
即:先局部后整体,化繁为简。例如:'田`有几个`口'?先将口字选,再对照,四口围成`田'。

算式如下:

1,再求出筛子总面积是多少平方厘米(n)。
2,再求得:目数/c㎡(X)。
3,总目数=n×X=nX。
追答:依此法,应先求得一目是多少。(国家有规定,可查)再除以总目数。

Ⅵ 米勒-罗宾算法

献上 素数测试+大数的因素分解 的概率算法

素数在密码届被广泛使用。
如何判断一个素是素数,迄今为止最有效的方法是筛数法,做个表(打表法)即素数的倍数一定是合数。筛选法的效率很高,但是遇到大素

数就无能为力了。
米勒罗宾算法是一个相当着名的判断是否是素数的算法,能够很大概率的判断一个数是否是素数(接近100%,在一定范围内能达到100%)。

在工程方面被广泛应用。
米勒罗宾算法的核心是课上提到的费马小定理:

即如果一个数n 它的 a^(n-1)%n !=1 (0<a<n) 则它一定是合数。
如果 a^(n-1)%n ==1 (0<a<n) 则它可能是合数可能是素数。概率算法的概率就在这个 a上体现。
/*
1 随机取一个 a
2 如果 它不满足 a^(n-1)%n ==1
3 则它一定是 合数
4 退出
5 如果它满足 a^(n-1)%n ==1
6 则它是一个素数的概率是1/2
7 回到 1
*/
如果对这个过程重复50次,每次都没说它是合数,那这个数是素数的概率是多少那?
它只有(1/2)^50可能不是素数!
很显然就像是投硬币那样如果你投了1000次,每次都投到正面 ,那你就会怀疑这个硬币2面都是正面!
米勒罗宾算法的算法很简单,但是由于需要计算a^(n-1)%n这类的问题,如果不经行优化,对于大数计算时间复杂度仍旧很高。
下面Witness(long a,long n)这个函数就是用java实现的a^(n-1)%n的比较快速的大数计算。
Witness计算的核心是"模运算"
/*
把a 分解成 t个2 和 奇数u的乘积 ,比如 144 可以分解成4个2 和一个9的乘积
于是根据"模运算",我们可以把计算a^(n-1)%n,分解成计算 4次(a^2)迭代计算和a^9%n的计算
对于4次(a^2)迭代计算,只需一个for,执行 t次
对于a^9%n的计算可参考Molar_Exponentiation(long a, long b,long n)实现
具体方法为
/*
定义一个数d为结果,初始值为1
将9化为2进制1001(2^0方位是第一位)共四位
则做四次操作
d=d*d%n
如果当前位为1则再做
d=d*a%n
*/
*/

以上算法其实就是第一次课堂练习最后道题的算法!
当然整个算法还有许多细节:
1比如2个64位整数的乘积超过64位,会产生溢出。解决这个问题的方法有3个
1)使用汇编写大数乘法和模
2)使用数组编写大数
3)使用JAVA,Java有大数类,方便实惠!所以这次开始用c++写,后来改成了java
2随机数的产生,尽量产生足够长的奇数,效果好!
3实现可以做张素数表,加速计算,我就实现打了张1900个素数的大表!大家不要鄙视打表,在计算机中很常用的。

当然米勒罗宾算法只能判断它是否是素数,但如果知道了它不是素数后,则么样才能得到它的因数那?
正常的算法是O(logn)的,当然有更快的算法"POLLARD启发式搜索"
这个算法我看了一个好长时间才看懂的。核心是中国剩余定理!相当巧妙!

这个算法是启发式的,不一定能在有限时间内找到,需要写的很好才不会遇到偶尔死循环的情况。
要优化可以考虑优化gcd的计算。这个算法我写的方法还有很多漏洞,相当不完善,自己功力也不够解释清楚。
大家有兴趣的话还是自己看书吧,祝能看懂!
当然还有留下点以为,对于分解因数有更巧妙的办法吗?

Ⅶ C语言在数组中筛选数处理

#include"stdio.h"
#defineN100
intmain(intargc,charconst*argv[])
{
inta[N],i,j;
for(i=0;i<N;++i)
{
scanf("%d",a+i);
}
for(i=0;i<N;i++)
{
for(j=i+1;j<N;++j)
{
if(a[i]%2==1&&a[j]%2==1&&a[i]>a[j])
{
a[i]=a[i]-a[j];
a[j]=a[i]+a[j];
a[i]=a[j]-a[i];
}
}
}
for(i=0;i<N;++i)
{
if(i%10==0)printf(" ");
printf("%d",a[i]);

}
return0;
}

以上算法基于选择排序算法


可将N设置为10 ,进行测试

Ⅷ 求教一个数据筛选的算法

怎么发现在这里问问题的人都惜墨如金,只写个题目,生怕再多写一个字出来?你至少应该描述描述你的问题

Ⅸ 筛网目数是怎么计算的

目数的计算方法:25.4/(丝径+孔径)=目数

筛网目数是指在一英寸(25.4mm )的长度,一共有多少个孔排列,就是多少目。并不是25.4平方毫米,而是在这个长度的一列。比如一个田字形,最左边的两个孔总共长度是25.4,那么就是两目,而不是四目。

Ⅹ 什么是筛法(数论中古老的方法)

在数论中有广泛应用的一个初等方法,起源于古老的埃拉托斯特尼筛法。所谓筛法,可描述如下: ①给定“被筛集合”。这是依赖于某一参数□ 的集合族□(□),□□□□□。每一集合□(□)由有限个(可重复的)整数组成,且当□ →∞时元素个数也趋于无穷。②给定“筛”。这是由无限多个不同的素数组成的集合□ 以及对每一□ □□□□ 给定□(□)个模□的不同的剩余类□(□)所组成,其中1≤□(□)<□。③进行“筛选”。给定正数□>2,把集合□(□)中属于剩余类□(□)的所有元素都去掉,其中□≤□,□□□□□。剩下的元素所组成的□(□)的子集及其元素个数,均记为□(□(□),□(□),□,□),是□和□的函数,称之为筛函数。当□(□)仅有一个剩余类□≡0(mod□)时,筛函数记为□(□(□),□,□)。 选取不同的被筛集合、筛和□,经筛选后,可得到具有不同算术性质的子集,所以许多数论问题有可能用筛法来研究。例如,取参数□为正整数□,□(□)由某些大于1不超过□的整数组成,□是全体素数。再取□=□(整数□≥2)。于是□(□(□),□,□)是由□(□)中所有大于□不超过□,且其素因子都大于□的整数组成。这种整数是不超过□-1个素因数的乘积。当□=2时即是埃拉托斯特尼筛法。 又如,设□、□是正整数。以{□,□}表示命题:每个充分大的偶数是两个素因数分别不超过□和□个的乘积之和。命题{1,1}基本上就是哥德巴赫猜想。对于这类命题,可取参数□为偶数□,集合□1(□)={□(□-□),2≤□≤□-2},□为全体素数,□=□(整数□≥2)。若能证明对充分大的偶数□ 有□(□1(□ ),□,□)>0,则证明了命题{□-1,□-1}。假若将□1(□)改取为集合□2(□)={□-□,素数□<□□},那么,根据对充分大的偶数□有□,就可推出命题{1,□-1}。 筛法理论主要是研究筛函数的性质,特别是它的上、下界估计。按照□(□)/□在某种平均意义上是“小”还是“大”,就称相应的筛法为小筛法或大筛法。以上的例子都是小筛法。大筛法是□.B.林尼克在研究模□的正的最小二次非剩余时提出来的。 他证明了对任意的筛□和□(□),只要 □就一定有□□□,这里□□(□)={М+□,1≤□≤□ },□1是一正常数,□□(□)是□中不超过□的素数个数。由于□(□)≥□□□是“很大”的,所以林尼克把他的方法称之为大筛法。 小筛法虽然历史悠久,但是在数论的具有重要理论价值的研究中,一直没有得到应用,这主要是由于用它来得到筛函数所需要的上界估计、尤其是正的下界估计十分困难。1920年左右,V.布龙首先对埃拉托斯特尼筛法作了改进,证明了命题{9,9}成立,以及所有孪生素数的倒数组成的级数是收敛的,开辟了应用筛法研究数论的新途径。他的方法称为布龙法。40年代,B.J.罗塞改进了布龙筛法,提出了所谓罗塞筛法,但是大约20年后才为人注意。这两种小筛法理论具有很强的组合数特征,所以又称为组合筛法。1950年左右,A.赛尔伯格利用二次型求极值的方法对埃拉托斯特尼筛法又作了重大改进,他的方法称为赛尔伯格(上界)筛法,十分简单,便于应用。小筛法在研究命题{□,□}和算术级数中的素数分布(即布龙-蒂奇马什定理)等许多着名数论问题时,得到了丰富的成果和自身的进一步发展。对小筛法理论作出重要贡献的还有A.A.布克什塔布引入了组合方法与P.库恩引入了加权方法。小筛法本身是初等的,但是必需同高深的分析方法相结合才能应用于某些问题的研究,例如命题{1,□}的研究。W.B.朱尔卡特和H.-E.里歇、H.伊瓦尼克等人利用现有的小筛法理论,只在最简单的情形得到了筛函数的最佳估计。小筛法理论的发展还远远没有完结。 A.雷尼首先于1947年改进了大筛法。1965年,K.F.罗特和E.邦别里又作了重大的改进,雷尼用他的方法估计狄利克雷□函数的零点密度,并结合布龙筛法证明了命题{1,□},这里□是一个未定出的大常数,开辟了应用大筛法的新途径。E.邦别里发现大筛法可归结为估计指数和的平方均值 □的上界,其中 □从而使大筛法成为近代解析数论的一个重要工具。1966年,H.达文波特和H.哈伯斯塔姆把大筛法进一步归为估计 □的上界,式中□□为任意复数,□□大筛法上界估计的证明一直是比较复杂的,1967年,P.X.加拉格尔用极为初等的微积分方法给出一个十分简单的证明。1974年,H.L.蒙哥马利和R.C.沃恩利用泛函分析的对偶原理把大筛法归结为某种双线性型的估计,证明了最佳估计 □于是大筛法失去原有的神秘面貌而成为一个初等的分析工具,在黎曼□函数、狄利克雷□函数的零点密度估计、算术级数中素数的平均分布以及布龙-蒂奇马什定理等问题中有重要应用。通常所说的筛法,总是指小筛法而言的。 中国的数学家在小筛法和大筛法的理论及其应用方面都有重要贡献。1957年,王元证明了命题{2,3}。1962年,潘承洞证明了命题{1,5}。1966年,陈景润证明了命题{1,2}(证明全文于1973年发表),世界公认是筛法理论最卓越的应用成果,陈景润在他的一些重要工作中所提出的思想和方法,对近代小筛法的进展有重要的影响。

热点内容
一加五安卓8什么时候推送 发布:2024-11-15 11:19:40 浏览:854
暗影骑士擎有哪些配置 发布:2024-11-15 11:13:46 浏览:598
方舟主机专用服务器是什么意思 发布:2024-11-15 11:12:23 浏览:8
创维最早的服务器是什么 发布:2024-11-15 11:11:35 浏览:864
手机配置太低怎么下载原声 发布:2024-11-15 11:03:31 浏览:905
21款奥迪a6配置有哪些 发布:2024-11-15 11:03:20 浏览:120
sql内连接外连接 发布:2024-11-15 11:03:19 浏览:601
学完python基础 发布:2024-11-15 11:01:56 浏览:63
捏泡胶解压 发布:2024-11-15 10:55:07 浏览:802
linux文件最后一行 发布:2024-11-15 10:44:11 浏览:612