问问算法后面的为什么

[亡魂溺海] 提交于 2020-03-09 08:15:31

题目:写一个函数,判断一个数是否是素数

素数是指除了能被1和它本身整数外,不能被其他任何整数整除的数

我们常用的方法就是 :假设输入为k,判断k是否能够被2到根号k之间的数整除,如果能够,则说明不是素数,反之,则是素数

那为什么要 根据 k是否能够被2到根号k之间的数整除 来做判断,这背后的道理逻辑在哪里?

这是我接触C语言的第四年,前面三年我一直都没有弄清楚过,最近的一点感悟就是 多问问自己为什么

比如说 36 是素数 开方等于6
而 36=312 36=49 36=6*6
36如果写成两个数相乘的形式,一定有一个是<=根号36,有一个是>=根号36,所以只要判断从2-根号36就好了,根号36之后的数一直到36-1,都是对前面乘法的重复

此外,反证法:
设k=ab;
如果存在 a,b>根号k,
则a
b>根号k*根号k=k,与已知矛盾,
所以 如果k有除了1和本身以外的其他因子,那一定也在1到根号k里面存在

C代码:

#include<stdio.h>
#include<math.h>
int sushu(int n);
void main()
{
 int n;
 scanf("%d",&n);
 sushu(n);
}
int sushu(int n)
{
  int i;
  for(i=2;i<=sqrt(n);i++)
  if(n%i==0) 
  {
    printf("%d不是素数",n);
    return 0;

  }
  printf("%d是素数",n);
}

运行结果:
在这里插入图片描述

反思:
编程往往会提出一些很好的思想,那这些思想背后为什么是这样呢?

已知三角形三条边求面积,用海伦公式,那海伦公式是怎么来的?
link.

我们要多问问为什么,把这套逻辑背后的来龙去脉弄清楚,这才是真正掌握了,也让我更好的理解了计算机与数学紧密相关

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!