100以内素数和问题

liumuchengquan 2014-12-17 04:10:27

public class Test {
public static void main(String[] args) {
int sum = 0;
for (int i = 2; i < 100; i++) {
for (int j = 2; j <= i; j++) {
if (i%j == 0 && i!=j) {
break;
}else if (j>i/2) {//这一句看不懂
sum = sum +i;
break;
}
}
}
}

}
...全文
189 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 u011106669 的回复:
按照我们原来对素数的理解,从1到这个数字本身之间,除了1和这个数字本身之外,没有其他可整除的数字。但实际上数学算法中已经证明,只要是从这个数字的平方根到这个数字之间没有这个数字能整除的数,就可以判断这个数字是素数。比如10,10的平方根是3.多,可以直接判断从3到10之间,有5这个数字,能被10整除,所以就可以判定10不是素数。你的代码中用到了类似这个得设计,如果一个数字,不是素数,那么它可定有能够整除的数,能够整除的这些数字,一定会有比这个数字的一半小,或者等于这个数字的一半的,一定不会有大于这个数字一半的。
应该是从3到平方根,
public static int m(){
		boolean bool;
		int num = 0;
		for (int i = 3; i < 100; i+=2) {//偶数不用遍历
			bool = true;
			for (int j = 3; j <= Math.sqrt(i); j++) {
				if (i % j == 0) {
					bool = false;
					break;
				}
			}
			if (bool){
				System.out.print(i + " ");
				num += i;
			}
		}
		return num;
	}
zcs201093189 2014-12-20
  • 打赏
  • 举报
回复
public static boolean isPrime(int n){ if(n==1){ return false; }else if(n==2){ return true; }else{ int half=(int) Math.sqrt(n); for(int i=2;i<=half;i++){ if(n%i==0){ return false; } } return true; } } 对于这个算法效率会更高,建议采用这种方法
zcs201093189 2014-12-20
  • 打赏
  • 举报
回复
大于一半不会被整除的,这里这么做减少了一半的判断,大大提高了效率
tony4geek 2014-12-17
  • 打赏
  • 举报
回复
}else if (j>i/2) { 折半的意思。 好比, 比如 60除以 2等于 30 。 30以后就不用找了因为除以2已 代表了素数。
soton_dolphin 2014-12-17
  • 打赏
  • 举报
回复
因为 i / 2 与 i 之间的数都不会被i 整除。 比如 i = 12, i / 2 = 6; 7 ~ 12 之间的数都不会被12 整除
大数据小白 2014-12-17
  • 打赏
  • 举报
回复
按照我们原来对素数的理解,从1到这个数字本身之间,除了1和这个数字本身之外,没有其他可整除的数字。但实际上数学算法中已经证明,只要是从这个数字的平方根到这个数字之间没有这个数字能整除的数,就可以判断这个数字是素数。比如10,10的平方根是3.多,可以直接判断从3到10之间,有5这个数字,能被10整除,所以就可以判定10不是素数。你的代码中用到了类似这个得设计,如果一个数字,不是素数,那么它可定有能够整除的数,能够整除的这些数字,一定会有比这个数字的一半小,或者等于这个数字的一半的,一定不会有大于这个数字一半的。
liumuchengquan 2014-12-17
  • 打赏
  • 举报
回复
写这么一个程序我也能写出来,但是看了一个别人写的,很厉害的样子,但是没看懂,求解释

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧