-
找小于N 的所有质数
添加时间:2013-5-26 点击量:笔试题目傍边,找素数呈现的几率有点大。昨天就做了一个,感触感染不是很难,但可以查核法度员的数学和编码功底。
用嵌套轮回来实现是很幻想的,如何削减轮回的次数?如何求出小于N的所有质数?
不成能将一个数除与所有小于它的数字,只要搜检到N的根就好了。但直接开根号还有个精度的题目。这个可能会产生误差。
索性将断定前提写成 ii<=N ,事理也是很简单的 i 大于N 的根,在搜检 第一个 i 除数 N 之前可以先搜检 小于第二个 i 是否可以 整除 N。
下面本身敲的求素数:
import java.util.ArrayList;
public class Prime {
public static int[] findPrime(final int max) {
int[] prime = new int[max + 1];
ArrayList list = new ArrayList();
// 两个嵌套轮回 ,赋值不是质数
for (int j = 2; j j <= max; j++) {
for (int k = 2j; k <= max; k++) {
if (k % j == 0) {
//不是质数 数组对应赋值为1
prime[k] = 1;
}
}
}
for (int i = 2; i < max; i++) {
//因为JAVA数组默认赋值为整数“0”,所以所有是质数的经过上方的嵌套轮回数组所对应的值是没有产生的
if (prime[i] == 0) {
list.add(new Integer(i));
}
}
//将list 转换为数组返回
int[] p = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
p[i] = (Integer) list.get(i);
}
return p;
}
public static void main(String[] args) {
int[] prime = Prime.findPrime(1000);
for (int i = 0; i < prime.length; i++) {
System.out.print(prime[i] + );
}
}
}