java,判断一个数是不是质数的程序?

intn=18;booleant=true;for(inti=2;i<=n/2;i++){if(n%i==0){t=false;break;我想问问for循环中的布尔表达... int n=18;
boolean t=true;
for(int i=2;i<=n/2;i++){
if(n%i==0){
t=false;
break;
我想问问for循环中的布尔表达式i<=n/2为什么我是n,谢谢!
这是提高效率的办法:

用n/2是因为一个数能被整除的最小的数是2.
比如举80的例子.
80是不能被任何大于40的数整除的.(自身除外)
所以不存在一个大于这个数一半的数能够整除这个数的..

用开方的原因是
比如36可以整除的数有
2 3 4 6 9 12 18(应该就是这些吧)

其实仔细观察就可以发现其实在36的平方根前后的数都是对称存在的,所以只要计算6之前(包括6)的数就好了。
展开
 我来答
liushebiao
推荐于2017-09-22 · TA获得超过3336个赞
知道小有建树答主
回答量:724
采纳率:0%
帮助的人:416万
展开全部
这是求素数中为了提高效率的一个的技巧

其实写成Math.sqrt(n)最好

为了提高效率,不用一定计算到n.

当然计算到n是没错的

-----------补充-----------

除去自身和1,能够整除一个数的最小值应该是2,最大值不会超过这个数的一半,所以不存在一个大于这个数一半的数能够整除这个数,所以在楼主的方法中只要计算到n/2就好了..
wptpp
2009-10-02 · TA获得超过187个赞
知道小有建树答主
回答量:357
采纳率:0%
帮助的人:204万
展开全部
因为一个数的最小质子是2撒,所以你只要判断到n/2就可以了
对于18你就只需要判断到9就OK了,大于9的根本就不可能整除了(除了18,但是判断质数不需要它)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d01bcdb
2009-10-02 · TA获得超过352个赞
知道小有建树答主
回答量:277
采纳率:0%
帮助的人:265万
展开全部
n也可以,只是没必要再用大于n/2得部分进行循环,因为一个数i>n/2时,n/i!=0,所以可以不用再循环。这样就提高了算法的效率。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
剑走偏锋的话多多
推荐于2017-09-30 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:69.8万
展开全部
/* 判断一个数是否是素数(质数) */
public boolean isPrime(int number){
for (int i = 2; i < number; i++){
if(number%i == 0){
return false;
}
continue;
}
return true;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
freish
2009-10-02 · TA获得超过2878个赞
知道大有可为答主
回答量:3153
采纳率:0%
帮助的人:2746万
展开全部
不用判断到二分之n吧,到根号n就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式