如果一个数字不是素数 那它除了1和他本身一定还有别的约数;
如上图:
如果一个数的约数在其开平方的右边 则必然会存在一个约数在其开平方的左边 所以
判断一个数是否为质数 只需要观察在其2 到 开平方数中间是否含有约数即可
比如说 判断16是否为质数 我们去找16的约数时 判断它的范围 只需要找到
16的开平方数就可以了 而不必一直找到<16 或者<= 16/2
ps:这两种情况不再贴代码了
lay: for(int i = 2;i<=100;i++){
for(int j = 2;j<=Math.sqrt(i);j++){
if(i%j==0){
continue lay;
}
System.out.println("质数有"+i);
}
}
方法二:
思路:
1、这个程序用了两层循环。外层循环列举从2到100之间的每一个整数(作为被除数),
然后在内层循环中用从2到它之间的数去除它,如果找到了一个能够整除它的数,内层循环将立即跳出(此时j小于i)。
如果一直没有找到能够整除它的数,则当内层循环将2到它之间的所有数都尝试过一遍之后,内层循环也跳出(此时j等于i)。
2、等到内层循环跳出之后,程序接着判断j是否大于等于i,如果是(上面第二种情况),
表明这个数是质数,于是将这个数打印出来并计算到累加和中去;如果不是(上面第一种情况),表明这个数不是质数。
public static void test2() {
int i, j;
for (i = 2; i <= 100; i++) {
for (j = 2; j < i; j++) {
if (i % j == 0)
break;
}
if (j >= i)
System.out.println(i);
}
}
方法三:
思路:
1、外层循环作为被除数,内层循环作为除数。
2、定义一个开关,标记外层循环数是否为质数。默认为 true
3、内层循环结束,如果开关还为true。即被除数为质数,打印出来
public static void test3() {
for (int i = 2;i<= 100;i++){//1既不是质数也不是和数,所以从2开始
boolean k = true;
for (int n = 2; n < i; n++) {
if (i % n == 0) {
k = false;
break;
}
}
if(k){
System.out.print(i + " ");
}
}
}