先看一下什么是素数:素数也叫质数(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 移位寄存器的用法子程序的编程方法数组插入及至电子表格字符串的转换方法。如果你觉得这篇文章对你有用的话,抖抖小手点个赞吧。