cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1666|回复: 14

有关素数的问题!!

[复制链接]
发表于 2005-7-25 08:11:54 | 显示全部楼层 |阅读模式
<>在c语言的书上看到,计算素数用穷举法</P>
<>不知道labview里有没有这样的方法,望高手指点!</P>
<>例如:求解100以内的所有素数该如何编程。、</P>
<P>我想用两个循环嵌套,可是还是没有做出来。希望高手指点。</P>
<P>谢谢</P>
[此贴子已经被作者于2005-7-25 0:14:35编辑过]

发表于 2005-7-25 17:22:11 | 显示全部楼层
对,就是循环就可以的!不过没有做现成的例子出来!
 楼主| 发表于 2005-7-26 07:23:10 | 显示全部楼层
<>老师,帮我做一个吧,我做不出来,脑袋都快想破了</P><>拜托,多谢了</P>
 楼主| 发表于 2005-7-26 23:37:45 | 显示全部楼层
<>我做出来了,可是不知道为什么 ,不能算出10 以内的素数。还有就是只能计算100以内的素数</P><>其他的就不能算了为什么!!!</P><>我的方法比较笨,望老师指点!</P>
 楼主| 发表于 2005-7-26 23:38:54 | 显示全部楼层

这是压缩文件

<>
</P>

<>大虾 多多指点阿</P>

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2005-7-27 07:20:18 | 显示全部楼层
<>help </P><>help</P><>help</P>[em01]
发表于 2005-7-27 07:54:35 | 显示全部楼层
兄弟,你还有二个子VI没有上传上来,没有办法运行!
 楼主| 发表于 2005-7-27 17:11:28 | 显示全部楼层
<>大虾不好意思阿</P>
<>希望尽快回复我哦  </P>
<>压缩包在下面</P>
[此贴子已经被作者于2005-7-27 9:15:15编辑过]

 楼主| 发表于 2005-7-27 17:14:46 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2005-7-27 19:06:26 | 显示全部楼层
<>我忘了什么是素数了!我先把素数的资料找来,下次再看看具体如何编了:</P><>求素数问题(很典型的问题)
以下是求解素数的三种方法,大家可以按照算法写出程序代码。
【1】求10000以内的所有素数。
素数是除了1和它本身之外再不能被其他数整除的自然数。由于找不到一个通项公式来表示所有的素数,所以对于数学家来说,素数一直是一个未解之谜。像著名的哥德巴赫猜想、孪生素数猜想,几百年来不知吸引了世界上多少优秀的数学家。尽管他们苦心钻研,呕心沥血,但至今仍然未见分晓。
自从有了计算机之后,人们借助于计算机的威力,已经找到了2216091以内的所有素数。
求素数的方法有很多种,最简单的方法是根据素数的定义来求。对于一个自然数N,用大于1小于N的各个自然数都去除一下N,如果都除不尽,则N为素数,否则N为合数。
但是,如果用素数定义的方法来编制计算机程序,它的效率一定是非常低的,其中有许多地方都值得改进。
第一,对于一个自然数N,只要能被一个非1非自身的数整除,它就肯定不是素数,所以不
必再用其他的数去除。
第二,对于N来说,只需用小于N的素数去除就可以了。例如,如果N能被15整除,实际
上就能被3和5整除,如果N不能被3和5整除,那么N也决不会被15整除。
第三,对于N来说,不必用从2到N一1的所有素数去除,只需用小于等于√N(根号N)的所有素数去除就可以了。这一点可以用反证法来证明:
如果N是合数,则一定存在大于1小于N的整数d1和d2,使得N=d1×d2。
如果d1和d2均大于√N,则有:N=d1×d2&gt;√N×√N=N。
而这是不可能的,所以,d1和d2中必有一个小于或等于√N。
基于上述分析,设计算法如下:
(1)用2,3,5,7逐个试除N的方法求出100以内的所有素数。
(2)用100以内的所有素数逐个试除的方法求出10000以内的素数。
首先,将2,3,5,7分别存放在a[1]、a[2]、a[3]、a[4]中,以后每求出一个素数,只要不大于100,就依次存放在A数组中的一个单元中。当我们求100—10000之间的素数时,可依次用a[1]-a[2]的素数去试除N,这个范围内的素数可以不保存,直接打印。 </P>
<>【2】用筛法求素数。
简单介绍一下厄拉多塞筛法。厄拉多塞是一位古希腊数学家,他在寻找素数时,采用了一种与众不同的方法:先将2-N的各数写在纸上:</P><P>在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数是5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于N的各数都画了圈或划去为止。这时,表中画了圈的以及未划去的那些数正好就是小于 N的素数。</P><P>这很像一面筛子,把满足条件的数留下来,把不满足条件的数筛掉。由于这种方法是厄拉多塞首先发明的,所以,后人就把这种方法称作厄拉多塞筛法。
在计算机中,筛法可以用给数组单元置零的方法来实现。具体来说就是:首先开一个数组:a<i>,i=1,2,3,…,同时,令所有的数组元素都等于下标值,即a<i>=i,当i不是素数时,令a<i>=0 。当输出结果时,只要判断a<i>是否等于零即可,如果a<i>=0,则令i=i+1,检查下一个a<i>。
筛法是计算机程序设计中常用的算法之一。</P><P>【3】用6N±1法求素数。
任何一个自然数,总可以表示成为如下的形式之一:
6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,…)
显然,当N≥1时,6N,6N+2,6N+3,6N+4都不是素数,只有形如6N+1和6N+5的自然数有可能是素数。所以,除了2和3之外,所有的素数都可以表示成6N±1的形式(N为自然数)。
根据上述分析,我们可以构造另一面筛子,只对形如6 N±1的自然数进行筛选,这样就可以大大减少筛选的次数,从而进一步提高程序的运行效率和速度。</P><P>在程序上,我们可以用一个二重循环实现这一点,外循环i按3的倍数递增,内循环j为0-1的循环,则2(i+j)-1恰好就是形如6N±1的自然数。 </P>[em04]
发表于 2005-7-27 19:07:57 | 显示全部楼层
你的这种方法好像只适用于100内的范围的吧?10以内的可以用吗?你后面用了一个常量数组接上去的方法!不过上面产生了一些数,你可以用一个CASE,当这个范围为10内的时候把前面的数组屏蔽掉!
 楼主| 发表于 2005-7-27 21:35:42 | 显示全部楼层
 楼主| 发表于 2005-7-27 21:37:36 | 显示全部楼层
<>哦,我试过了,不知道为什么后面的数 老是不出来,我用了两个case</P><>我感觉能够判断出来,可是运行的时候全部都是零。</P>
发表于 2005-7-28 00:11:12 | 显示全部楼层
 楼主| 发表于 2005-7-28 01:32:24 | 显示全部楼层
<>哦,那我再试一下吧</P><>大概没想好。</P><>大虾能帮我解决当数值超过100求素数的问题么?</P>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2024-5-18 22:22 , Processed in 0.626436 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表