永发信息网

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

答案:3  悬赏:30  手机版
解决时间 2021-03-24 01:20
在c语言编程中“求100~200间的全部的素数”为什么会用到开平方呢
最佳答案
这是一个数学问题。
质数的定义为,除了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做模除,就可以准确的判断是否有其它因子,从而得到是否为质数的结论。
这就是为什么在判断质数中的程序中会用到求平方根的原因。其本质原因是为了减少模除次数,提高效率。
全部回答
关于开平方的问题,首先肯定如果改成for(i=2;i关于101开始的问题请看最外层循环for(m=101;m<=200;m=m+2)。很明显,程序员直接把偶数的情况排除了,只考虑了奇数。(因为偶数肯定不是素数嘛- -!)
这两个细节都让整个程序的循环次数大大减少,提高了效率。
不用也可以, k=sqrt(m); for(i=2;i<=k;i++) 这个可以换成
for(i=2;i*i<=m;i++)
为什么需要这个sqrt(m),其实是为了减少循环次数而已
有三个循环次数,一个是m-1,一个是m/2(m的一半),最后一个是sqrt(m),这三个数,都可以,但是sqrt(m)最小
m-1不用说,肯定是可以的,素数的定义就是这样
m/2这个也是可以的,M/2~m之间肯定不会有他的因子,因为这个区间的数值乘以最小的系数2都比m大
sqrt(m)这个难理解一点。因为某个数的因子肯定是围绕sqrt(m)这个数值的在两边排列的
也就是说,在1~sqrt(m)之间有个因子,那么m除以这个因子得到的数值肯定在sqrt(m)~m之间,所以计算一次就够了
而且sqrt(m)这个数值比m/2要小,所以为了减少计算次数,用这个是最好的
100肯定不是素数,这是定下的,呵呵
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
文科大专有哪些专业吃香
纪家沟地址在哪,我要去那里办事
熟悉高中的请进来
有没有一个电视剧名字里面有宿字和豆字
回民不吃什么,回族信奉什么宗教?
纳米材料被誉为21世纪最有前途的新型材料,其
怎么用反证法证明根号3是无理数??
关于戏剧的诗歌,诗歌的起源
几种().A,自由式B,并列式C,相对式D
正倒两个j什么运动鞋牌子,谢谢
老年人跌倒引起发烧和一般发烧一样吗?
府谷县艺海文艺演出公司地址有知道的么?有点
索尼专卖店地址在哪,我要去那里办事
五州四海的意思
山东威海交警2大队停车场在哪?
推荐资讯
苹果4和4s的ppi一样吗?分辨率一样吗?
房间门开空调后会吱吱响怎么办
一件衣服比如说原价是235打6.8折,怎样算这个
奥迪A4L标准版有感应雨刷吗
---IsyourfatheraPartymember?---Yes,he_____
车不打火。机械液压助力转动方向盘对转向系统
孟加拉属于东盟成员吗
我的世界超梦怎么抓,我的世界超梦在哪里出现
上海斌昔文化发展有限公司是骗子公司我也被骗
7月8日是什么星座
如图,点A,B,C是正方体三条相邻的棱的中点
关于玻纤壁布的品牌,什么牌子的稍微好些?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?