原题链接:[编程入门]筛选N以内的素数
解题思路:
根据素数与合数的概念可以知道,素数是只能被1和它本身整除的数,而合数与之相反,是除了能被1和它本身整除之外,还能被其他因数整除。因此对于在一个范围内求素数,需要用到双循环结构,第一层循环用来控制在这个范围内的每一个数,第二个循环用来控制在这个范围内且在当前值的范围中能否被除了1和它本身之外的数整除。可以定义一个标志用来标识是否为素数,如果是素数则为0,反之则为1,最后输出的时候如果标识为0则输出当前的值。
注意事项:
1、素数是只能被1和它本身整除的数
2、需要定义一个标志来标识素数和合数
参考代码:
#include <stdio.h> #include <math.h> int main() { int N; scanf("%d", &N); for (int i = 2; i <= N; i++) { int flag = 0; // 定义flag为0是素数,flag为1则为合数 for (int j = 2; j <= sqrt(i); j++) // 是素数则其因子一定小于等于其平方根 if (i % j == 0) // 如果能被其他数整除,则说明这个数不是素数 flag = 1; // 合数设置flag为1 if (flag == 0) // 如果flag为0则这个数是素数,那么输出这个数 printf("%d\n", i); } }
程序解读:
这里用到了math函数库中的sqrt,意思是开平方,对于任意数而言,必定会有其中一个因子小于或等于其平方根,另一个因子大于或等于其平方根。比如12,它的因数有1.2.3.4.6.12。在判断12是不是素数可以从2~11挨个判断,但是后面的4*3,6*2,12*1都是前面判断过的(1*12,2*6,3*4),所以如果这个时候再判断一遍就会增加程序负担,所以在判断时只需要判断到12的开平方即可。
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复