引入:
最近网上看了一组JAVA面试算法题,我就尝试都做了下,每个都给出相应的JAVA实现,方便自己复习下差不多遗忘的算法。现在比较好的公司面试几乎都会面算法吧。
题目:
列出A到B区间(A<=X<=B)中所有的素数,并且打印出来
代码:
很简单,主要就是判断一个数是否为素数,方法是如果是1,那么不是素数,如果大于1,那么从2一直到它平方根,依次让该数对这些数取模,如果为0(表示整除了) ,那么就不是素数,否则是素数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
package
com.charles.algo;
/**
*
* 题目:列出A到B区间(A<=X<=B)中所有的素数,并且打印出来
* @author charles.wang
*
*/
public
class
ListPrime {
private
ListPrime(){}
/**
* 打印素数
* @param zoneMin
* @param zoneMax
*/
public
static
void
printPrimes(
int
zoneMin,
int
zoneMax){
for
(
int
i=zoneMin;i<=zoneMax;i++){
if
(isPrime(i)){
System.out.print(i+
" "
);
}
}
}
/**
* 判断一个数是否是素数,判断的方法是用2,3,4..一直到 sqrt(number)的值去作为除数,
* 让number去除这些值,如果能整除,说明这个数不是素数
* @param number
* @return
*/
private
static
boolean
isPrime(
int
number){
//1不是素数
if
(number==
1
)
return
false
;
//判断一个数是否是素数,判断的方法是用2,3,4..一直到 sqrt(number)的值去作为除数,
//让number去除这些值,如果能整除,说明这个数不是素数
for
(
int
i=
2
;i<=Math.sqrt(number);i++){
if
(number%i ==
0
){
return
false
;
}
}
return
true
;
}
public
static
void
main(String [] args){
int
zoneMin =
2
;
int
zoneMax=
301
;
System.out.println(
"打印区间["
+zoneMin+
","
+zoneMax+
"]内所有的素数:"
);
printPrimes(zoneMin, zoneMax);
}
}
|
本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1345602,如需转载请自行联系原作者