用C求1到n的素数(质数)

        首先我们了解下素数的定义。一个整数的因数只有1和它本身的数称之为素数,又名质数。其中1不是质数。例如6的因数有1,2,3,6,那么6不是素数,3的因数只有1,3那么3是质数。

     要解决这个问题的关键是找到n的因数,我们可以用循环遍历来解决。例如3/1=3,3/2=1.5,3/3=1。那么1,3是他的因数,所以3是质数。

     代码如下 

#include <stdio.h>

int main()
{
    int i1, i2, n;
    scanf("%d", &n);
    int shu = 0;
    for (i1 = 2; i1 <= n; i1++)
    {
        int a = 0;//一定要将这个定义放在循环里,否则一次循环后a的值会改变
        for (i2 = 2;i2 < i1;i2++)
        {
            if (i1 % i2 == 0)
            {
                a++;
                break;//借助a来判断是否有第三个整除结果
            }
        }
        if (a == 0)
        {
            printf("%d\n", i1);
            shu++;
        }
    }
    printf("素数个位为:%d", shu);
    return 0;
}

        这是最直接的算法,不过我们在仔细想一想,偶数有没有可能是质数。当偶数是2时,显然他只有1,2两个因数是质数,但当偶数大于二时,他是不是一定是2的倍数,即这个偶数一定有因数2,由此我们便可以再将代码优化些。

        优化代码

#include <stdio.h>
int main()
{
    int i1, i2, n;
    scanf("%d", &n);
    int shu = 1;
    printf("2\n");//为了方便后续代码写,提前将2特例输出
    for (i1 = 3; i1 <= n; i1 = 2 + i1)//每次加2,除去了偶数
    {
        int a = 0;//一定要将这个定义放在循环里,否则一次循环后a的值会改变
        for (i2 = 2;i2 < i1;i2++)
        {
            if (i1 % i2 == 0)
            {
                a++;
                break;
            }
        }
        if (a == 0)
        {
            printf("%d\n", i1);
            shu++;
        }
    }
    printf("素数个位为:%d", shu);
    return 0;
}

        喜欢的点赞收藏,如有错误欢迎在评论区留言指正。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值