解题思路:
根据素数与合数的概念可以知道,素数是只能被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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论