解题思路:
根据素数与合数的概念可以知道,素数是只能被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语言代码)浏览:541 |
众数问题 (C语言代码)浏览:911 |
DNA (C语言描述,数据结构)浏览:909 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:688 |
C语言训练-数字母 (C语言代码)浏览:648 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:590 |
青年歌手大奖赛_评委会打分 (C语言代码)浏览:2248 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:631 |
C语言程序设计教程(第三版)课后习题10.1 (C++代码)浏览:529 |
C语言训练-自由落体问题 (C语言代码)浏览:637 |