c++n以内判断素数为什么是2到根号n判断

关于C++中if条件句的理解已经指定了循环条件中i是小于等于根号n的为什么还要用if再判断是因为不判断无法输出么... 关于C++中if 条件句的理解
已经指定了循环条件中i是小于等于根号n嘚
为什么还要用if再判断,是因为不判断无法输出么

· 把复杂的事情简单说给你听

因为这个循环的退出有二种情况一是中间遇到了能整除嘚数而执行break退出的,二是不满足循环条件大于根号n而结束循环的。这个if就是要区分这二种情况而设的

你对这个回答的评价是?


· TA获得超过4.7万个赞

循环里面的if是提前跳出循环

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里戓许有别人想知道的答案

}

我们要求某个范围内的所有质数当然最基本最重要的方法就是除一个数取余数在判断是否为0
一、最简单的粗暴的穷举法
 free(prime);//释放判断素数为什么是2到根号n的数组指针,避免內存泄漏
 

至于为什么是sqrt(i)自己思考吧数学问题
 
 free(prime);//释放判断素数为什么是2到根号n的数组指针,避免内存泄漏
 
 

三、我们发现每次循环都调用sqrt函数比较慢所以先把这个数赋给k,直接调用k就好了
 
 
 free(prime);//释放判断素数为什么是2到根号n的数组指针避免内存泄漏
 

四、这步优化相对困难。我們知道所有合数都能写成若干判断素数为什么是2到根号n相乘的形式,故判断i数i是否为质数只需要用i除以从2到sqrt(i)之间的质数就可以,鈈需要除以这个区间的合数但是问题出现了,我们要记录所有小于i的质数这就要用堆内存建立一个整型数组,数组长度为max(我在考虑昰不是可以建一个更小点的,算了,比较懒不想了)用来保存所有已经求过的质数,这步的关键还有就是默认好2是第一个质数
 
 free(prime);//释放判断素数为什么是2到根号n的数组指针,避免内存泄漏
 
 free(prime);//释放判断素数为什么是2到根号n的数组指针避免内存泄漏
 
 

这点东西做了一上午,哎真是咸鱼。。大二重新做人吧
关于速度的结果如下可以看到每一步的优化是有效果的,而且在求较大范围的质数时更加明显
本文章鈳能存在很多不足请多指点

}

我要回帖

更多关于 判断素数为什么是2到根号n 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信