迪迦


私信TA

用户名:dotcpp0776032

访问量:1152

签 名:

等  级
排  名 6762
经  验 1382
参赛次数 0
文章发表 25
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

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

  评论区

  • «
  • »