寻找前50个素数
public class E02 {
public static void main(String[] args){
int count = 0;
//记录素数的个数,方便写入数组中
int result[] = new int[50];
//创建一个结果数组用来保存素数
int num = 1;
//从num=1开始检测是否为素数
while (count<50){
int step = 0;
//记录能被整除的次数
for(int j=1;j<=num;j++){
if(num%j==0){
step++;
}
}
if (step==2){
result[count]=num;
count++;
//控制while循环
}
num++;
}
//输出格式控制
for (int k=0;k<50;k++){
if (k%10==0){
System.out.println();
System.out.print(result[k]+" ");
}
else{
System.out.print(result[k]+" ");
}
}
}
}
结果:
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 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229
如需其它数量的素数,改变数组的大小即可。
部分改进:
对于是否为质数的判断,不需要遍历1到n的所有数,仅需遍历2到根号下n即可。
引自知乎:
首先,约数是成对出现的。比如24,你找到个约数3,那么一定有个约数8,因为24/3=8。
然后,这对约数必须一个在根号n之前,一个在根号n之后。因为都在根号n之前的话,
乘积一定小于n(根号nX根号n=n),同样,都在根号n之后的话,乘积一定大于n。
所以,如果你在根号n之前都找不到约数的话,那么根号n之后就不会有了。
作者:刘明
链接:https://www.zhihu.com/question/21808179/answer/21250639
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
代码改进:
public class E02 {
public static void main(String[] args){
int count = 0;
//记录素数的个数,方便写入数组中
int result[] = new int[50];
//创建一个结果数组用来保存素数
int num = 2;
//从num=1开始检测是否为素数
while (count<50){
int step = 0;
//记录能被整除的次数
for(int j=1;j<=Math.sqrt(num);j++){
if(num%j==0){
step++;
}
}
if (step==1){
result[count]=num;
count++;
//控制while循环
}
num++;
}
//输出格式控制
for (int k=0;k<50;k++){
if (k%10==0){
System.out.println();
System.out.print(result[k]+" ");
}
else{
System.out.print(result[k]+" ");
}
}
}
}