解题思路:
根据素数与合数的概念可以知道,素数是只能被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 人评分
Tom数 (C++代码)浏览:861 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1078 |
简单的a+b (C语言代码)浏览:863 |
【计算直线的交点数】 (C语言代码)浏览:1486 |
A+B for Input-Output Practice (VI) (C语言代码)浏览:571 |
演讲大赛评分 (C语言代码)浏览:1686 |
一元一次方程 (C语言代码)浏览:4183 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:494 |
买不到的数目 (C语言代码)浏览:3117 |
简单的a+b (C语言代码)浏览:664 |