实例说明
先看一下什么是素数:素数也叫质数(primer number),是指一个大于1的自然数,除了1和它自身外,不通整除其它自然数的数,符合这种规律的数就叫素数。
素数有无穷多个,那么在LabVIEW中如何编程实现求解1000以内的所有素数呢?
编程思路
求解1000以内的所有素数,这个问题可以分解为下面两个问题:
- 如何判断一个数是否为素数
- 查找1000以内的所有符合条件的素数
对于第一个问题,基本的判断思路比较简单:对于一个大于1的正整数x,如果用2到根号下x 之间的所有整数去除,均不能整除,则这样的x可以判断为是一个素数。
对于第二个问题,遍历1000以内的所有大于1的自然数,逐个判断是否为素数,若是,则统计出来,否则忽略。
下面看一下在LabVIEW中如何编程解决这两个问题。
如何判断一个数是否为素数
在LabVIEW写一个子程序,命名为"isPrimeNumber.vi",该子程序输入一个整数"x",输出一个布尔值"是素数?",若x是素数,则布尔值为真,反之为假,其框图程序的实现代码如下:
在上面代码中,使用for循环,循环次数为(根号下x)-1,其中,对x开根号后要向下取整并强制转换为一个32位的整数类型。在for循环内部,从2开始,用"商与余数.vi"函数逐个去整除x,若余数为0,则跳出for循环,即for循环结束,在循环结束后,将余数是否为0的判断值输出到循环外,若为0,则说明这个数不是素数,所以对其取反,作为整个子程序的输出,用来标示当前数是否为素数。
注意,在LabVIEW的for循环中,可以提前结束循环,相当于C语言中的break语句,其方法是,选中for循环框,点击右键,在弹出的右键菜单中选择"条件接线端",即可出现上图所示的条件结束特符号。通过这种方式,在用2到根号下x 之间的所有整数去除x的时候,只要出现一个能整除的情况(余数为0)就说明x不是一个素数,此时就可以跳出结束for循环,没必要循环完所有的次数。
查找1000以内的所有符合条件的素数
编写一个主程序来调用上面的子程序"isPrimeNumber.vi",查找1000以内所有符合条件的素数,其框图程序的实现代码如下:
根据素数的定义,使用for循环查找2-1000以内的所有素数,循环次数为999次,在for循环中添加一个移位寄存器用以存储所有的素数,其初始值为一个空数组。在循环内部逐个数判断是否为素数,若是素数,则使用"数组插入.vi"函数添加到移位寄存器的数组中,否则,移位寄存器中的值保留为上次的值。
循环结束后,移位寄存器数组中的值即为1000以内所有符合条件的素数,为方便查看结果,本例中将数组的所有元素使用"数组至电子表格字符串转换.vi"函数转换为字符串在前面板上进行显示,其显示结果如下,从图中可以看出,通过本程序,已经完整的求出了1000以内所有的素数了。
总结
通过这个例子可以学习到的知识点包括:
- for循环+break+移位寄存器的用法
- 子程序的编程方法
- 数组插入及至电子表格字符串的转换方法。
如果你觉得这篇文章对你有用的话,抖抖小手点个赞吧。