【C语言】通过代码计算100~200之间的所有素数。

这篇博客介绍了如何优化代码来查找100到200之间的素数。首先,通过遍历2到i-1来判断i是否为素数,然后使用sqrt()函数减少计算量,只遍历到根号i。最后,通过只检查奇数进一步提升效率。优化后的代码在保证正确性的同时提高了运行速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.

素数 i 只能被1 和 i 整除, 所以考虑使用 2 ~ i-1 来除 i 。

代码如下:       

int main()
{
    int COUNT = 0;
    int i = 0;
  
    for (i = 100 ; i <= 200 ; i++)
    {
        int j = 0;
        for (j =2; j< i ; j++)         //判断i是否为素数, 用 2~i-1 的数字除i, 看能不能整除。
        {
            if (i %j == 0)
                break;
        }
        
        if(j == i)
        {

            COUNT++;
            printf("%d ", j);
        }


    }
    printf("\n%d ", COUNT);
    return 0;
}

通过变量count可以计算100~200之间有多少个素数。

目的实现。

2. 优化代码

        如果 i = a*b , 那么 a , b中一定有一个数 <= 根号i ,因此不必计算 2~ i-1 的所有数字,只需计算  2~ 根号i 。

需要使用sqrt()函数进行开平方, 需引用头文件 #include <math.h>

代码如下:

#include <math.h>

int main()
{
    int COUNT = 0;
    int i = 0;

    for (i = 100 ; i <= 200 ; i ++)
    {
        int flag = 1;
        int j = 0;
        for (j =2; j<= sqrt(i) ; j++)        //一个数的两个因子 一定有一个小于 开平方它
        {
            if (i %j == 0)
              {

               flag = 0;                        //sqrt() 开平方, 用math.h
                break;
              }
        }


        if(flag == 1)
        {

            COUNT++;
            printf("%d ", i);
        }


    }
    printf("\n%d ", COUNT);
    return 0;
}

使用 flag 作为标记。

3. 进一步优化

由于100~200之间的偶数均能被2 整除, 所以都不是素数。我们只取奇数。

对for循环进行改进。

代码如下:

#include <math.h>

int main()
{
    int COUNT = 0;
    int i = 0;

    for (i = 101 ; i <= 200 ; i += 2)
    {
        int flag = 1;
        int j = 0;
        for (j =2; j<= sqrt(i) ; j++)            //一个数的两个因子 一定有一个小于 开平方它
        {
            if (i %j == 0)
              {

               flag = 0;                               //sqrt() 开平方, 用math.h
                break;
              }
        }


        if(flag == 1)
        {

            COUNT++;
            printf("%d ", i);
        }


    }
    printf("\n%d ", COUNT);
    return 0;
}

代码编写完毕。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值