关于用C语言判断一个数是否为素数循环只需到根号n的原理的理解性,不严格推导

 关于我为什么要专门出一章将素数的一种判别方法(还有其他方法,比如素因子筛选法,网上都可以找到原理,没有什么数学思想,有机会再写,没时间大家上网查一查都能查到),是因为一场升学考试的遗憾(也是离散数学课程上正好讲到了,离散数学的应用真的是一门令人兴奋的事儿,它是“元”),我希望可以在我来到的新学校里一定要将这遗憾的3分一定要弄清楚代码的数学本质逻辑,原理,方法,只有这样才能一点一点的和我不断的遗憾和解。喜欢数学原理卧C,这这这拦不住的(C语言)。话不多说,下面我们开始论述这样一个遗憾而简单的原理:

考虑关于一个大于1的正整数i,可以写成 i=a*b,我说这两个数其中一定存在一个数<=\sqrt{i},你同不同意?

为什么?

本篇文章只为了让大家理解,工科的学生严格的证明不利于理解的效率,我们需要将数学的结论迅速的在代码中应用,只有有时间,有机会,有必要才应该对证明严格。

比如16,\sqrt{16}=4,可以写成2*8,2<=4,还可以分解为4*4,4<=4=\sqrt{16}.恰好是a=b的时候取等号。

所以命题有正确的情况,可以证明在i为大于1的正整数时成立,那么借助这一个原理我们就可以减小循环的次数以优化代码。

#include<stdio.h>
#include<math.h>

void ifprime(int m)
{
    int i=(int)sqrt(m);
    int a=2;
    for(;a<=i;a++)
    {

        if(m%a==0)
        {
            printf("不是素数");
            break;
        }
    }
    if(a>i) printf("是素数");//这里if判断必须加,不加的话会出现什么情况?请初学者考虑。

}
int main()
{
    int m;
    printf("请输入一个大于1的正整数:");
    scanf("%d",&m);
    ifprime(m);
    return 0;
}

如果有问题欢迎随时与我沟通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值