在c语言编程中“求100~200间的全部的素数”为什么会用到开平方呢

2020-10-13 国际 336阅读
这是一个数学问题。
质数的定义为,除了1和本身,没有其它因子,即没有其它数可以被其整除。
对于任意的数n,因子肯定是比n小的数,所以如果m>n,那么m不可能是n的因子。
于是最直观的判断方法就是,从1一直到n计算模除,获取到因子总数,如果总数为2,那么就是质数。
这样对于任意的n,判断质数就需要做n次模除。为了使程序优化,可以修改为,对2到n-1做模除,只要有一个可以整除,那么就不是整数。
对于这样的算法,可以再次优化。
如果n有一个引子m, 那么可以写作n = m*k的形式,那么m和k不可能同时大于n的平方根s。
这一点可以用反证法来证明。
如果m>s 且k>s
那么m*k > s*s
于是得到n>n的结论。明显是错误的。
于是m和k至少有一个是小于等于s的。
这样在判断质数时,只需要从2一直到s做模除,就可以准确的判断是否有其它因子,从而得到是否为质数的结论。
这就是为什么在判断质数中的程序中会用到求平方根的原因。其本质原因是为了减少模除次数,提高效率。
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com