首先,给出素数的定义:
素数是只能被1和自身整出的整数。1不是素数
算法思维:
判断一个数是否是质数,只需要判断它是否只能被1和它本身整除。
那么如何判断一个数不能被除了1和它本身以外的其他数整除呢?想法是写一个循环,从2到这个数减1的所有整数依次被除。如果它们不能被整除,这个数就是质数。如果出现一个可除数,它就不是质数。
(其实判断素数可以通过把2到这个数的平方根的所有整数依次整除来优化。因为如果一个数n不能被一个整数除以2~根号n整除,那么被根号n~n-1整除的整数就不能是整数。把优化后的代码贴在文章最后。)
那怎么判断它是否可分呢?我们不知道C语言有运算符%来求余数。如果余数是0,说明它是可以被整除的。
让我们来写程序代码。这里说明一下,当你写某个函数的代码时,把函数写成函数,而不是把所有代码都放在主函数里。在main函数中调用你写的这个函数。
命名函数。如果你知道或者发现质数的英文单词是质数,那么这个函数可以命名为is_primer_number(如果你不知道质数的英文单词,可以直接命名,比如fun)。因为要传递一个整数进行判断,所以有一个int类型的参数。我们使用bool作为返回值(代码中应该包含头文件stdbool.h)。如果是质数,则返回true如果不是质数,则返回false。
代码:
写了判断是否是素数的函数。题目是要求1到1000之间的所有函数。你可以写另一个函数,它的功能是找出1到一个整数之间的所有质数,并打印出来。该函数被命名为print_prime_num。有一个int类型的参数。返回值写成整数,返回质数的个数。
循环将2和这个数之间的每个整数作为参数传递给上面编写的函数is_prime_number()。如果是质数,就打印出来。
运行结果:
判断素数的功能也可以优化。只需在循环中依次除以2到这个数的平方根的所有整数即可。因为如果一个数n不能被一个整数除以2~根号n整除,那么被根号n~n-1整除的整数就不能是整数。所以我们只需要在2和根号n之间循环这个数。
函数is_prime_number()可以写成如下形式。这里使用了求平方根的函数sqrt(),并且应该包含头文件math.h。另外,函数sqrt()的返回类型是double,但是我们这里要的是整数,所以我们加上(int)将其转换为整数。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。