关于我为什么要专门出一章将素数的一种判别方法(还有其他方法,比如素因子筛选法,网上都可以找到原理,没有什么数学思想,有机会再写,没时间大家上网查一查都能查到),是因为一场升学考试的遗憾(也是离散数学课程上正好讲到了,离散数学的应用真的是一门令人兴奋的事儿,它是“元”),我希望可以在我来到的新学校里一定要将这遗憾的3分一定要弄清楚代码的数学本质逻辑,原理,方法,只有这样才能一点一点的和我不断的遗憾和解。喜欢数学原理卧C,这这这拦不住的(C语言)。话不多说,下面我们开始论述这样一个遗憾而简单的原理:
考虑关于一个大于1的正整数i,可以写成 i=a*b,我说这两个数其中一定存在一个数<=,你同不同意?
为什么?
本篇文章只为了让大家理解,工科的学生严格的证明不利于理解的效率,我们需要将数学的结论迅速的在代码中应用,只有有时间,有机会,有必要才应该对证明严格。
比如16,=4,可以写成2*8,2<=4,还可以分解为4*4,4<=4=.恰好是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;
}
如果有问题欢迎随时与我沟通