每日一练:判断素数及其进阶(试除法)

#include<stdio.h>
main()
{
int i,j;
for(i=100;i<=200,1++)//将需要判断的数字进行遍历
    {
        //判断i是否为素数
        //试除法
        int j=0;
        for(j=2;j<i;j++)
        {
            if(i%j=0)
            {
                break;
            }
        }
        if(j==i)
        {
             count++;
             printf("%d",i);
        }
    }
    printf("\ncount=%d\n",count);
    return 0;
}

进行代码优化:

如果一个数字i不是素数 则一定可以写成a×b的形式 那么a和b中一定有一个数小于等于i的平方根

 

#include<stdio.h>
#include<math.h>
main()
{
int i,j;
for(i=100;i<=200,1++)//将需要判断的数字进行遍历
    {
        //判断i是否为素数
        //试除法
        int j=0;
        for(j=2;j<sqr(i);j++)//用math库里面的sqr开平方
        {
            if(i%j=0)
            {
                break;
            }
        }
        if(j>sqr(i))
        {
             count++;
             printf("%d",i);
        }
    }
    printf("\ncount=%d\n",count);
    return 0;
}

程序经过优化最多只用执行i的平方根次 从而大大提高了程序的效率

 

//更优解
//数字遍历时跳过偶数
for(i=101;1<=200;1+=2)

 

 

 

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值