第一种方法 暴力穷举法
import java.util.*;
public class Text2 {
public static void main(String[] args) {
int result []= new int[10000];
boolean flag=false;
for(int i=2 ; i<10000 ; i++)
{
//System.out.println( i );
for(int j = 2 ; j <i ;j++)
{
if(i % j == 0)
{
flag=true;
break;
}
}
if (flag==false) {
System.out.println( i );
}
flag=false;
}
}
}
第二种方法比第一种方法时间复杂度稍微简化了一下
将 j开根号得到作为判断条件
import java.util.*;
public class Text2 {
public static void main(String[] args) {
int result []= new int[10000];
boolean flag=false;
for(int i=2 ; i<10000 ; i++)
{
//System.out.println( i );
for(int j = 2 ; j <Math.sqrt(i) ;j++)
{
if(i % j == 0)
{
flag=true;
break;
}
}
if (flag==false) {
System.out.println( i );
}
flag=false;
}
}
}
第三种方法
数学原理在于:一个质数一定无法整除比他小的任何质数
import java.util.Arrays;
/**
* 类作用
*
* @author:yangshuang1
* @version:0.1
* @date: 2019/3/26 10:59
*/
public class Demo {
public static void main(String[] args) {
int result[] = new int[1260];
result[0] = 2;
result[1] = 3;
int length = 2;
for (int i = 5; i < 10000; i++) {
for (int j = 0; j < length; j++) {
if (i % result[j] == 0) {
break;
}
/*这里是整个算法能够被优化的关键,运用的是一个数学原理,遍历所有已经找到的质数然后将目标质数赋值给数组下一个位置,继续加入循环*/
else {
if (j==length-1){
result[length] = i;
length++;
}
}
}
}
//计算数组结果长度的
// int flag = 0;
// for (int i=0;i<10000;i++)
// {
// if (result[i]==0){
// flag = i;
// break;
// }
// }
// System.out.println(flag);
System.out.println(Arrays.toString(result));
}
}
其实还有一种算法
那就是上述算法第二层for判断条件 运用 j<math.sqrt(length)