求素数
这是一道N年前我求职java时的面试题。
当年的我是java菜鸟,遇到这道题更是一脸茫然啊。
在这趟算法题列车上,还是载上它吧。
素数:即是能被1和自己整除的数。1不是素数。
比喻:求19是不是素数?
那就来个2~18之间的循环,把每个数取出来让19整除,如果余数等于0,那就是素数了,否则不是。
明白上面逻辑,就好做了。
来个例子,求2~100之间的素数。
那么,先得来个2~100的循环,取出每一个数i,然后再来2~(i-1)之间的循环,得到每一个数j,
然后判断i%j==0是否成立,如果成立(出去1和i本身之外,发现了第三个数j,可以被i整除),确定不是素数。
上代码吧:
public class Test {
public static void main(String[] args) {
primeNumber(2, 100);
}
private static void primeNumber(int start, int end) {
if (start >= end) {
return;
}
//外层循环,逐个获取目标数字
for (int i = start; i <= end; i++) {
//内层循环,获取2~i-1之间的每个数
boolean isPrimeNumber = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
//确定不是素数,标记
isPrimeNumber = false;
//无需for循环
break;
}
}
if (isPrimeNumber) {
//是素数,输出目标数i
System.out.print(i);
System.out.print(", ");
}
}
}
}
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,