求100000以内的质数的优化过程(Java版)
版本一(优化之前):
class PrimeNumberTest2
{
public static void main(String[] args)
{
long start = System.currentTimeMillis();//记录开始的时间,以毫秒。
boolean isFlag = true;
int count = 0;//记录质数的个数
for (int i=1;i<=100000 ;i++ )//遍历1到100000个数
{
for (int j = 2;j < i ;j++ )
{
if(i % j == 0)//进行逐个判断
isFlag = false;
}
if (isFlag)
{
System.out.println(i);
count++;
}
isFlag = true;
}
long end = System.currentTimeMillis();//记录结束的时间
System.out.println("质数的个数" + count);
System.out.println("所花费的时间" + (end - start));
}
}
下面是执行后所用的结果及时间:

运行时间为:18496毫秒(不同计算机可能有差别,但是应该很小)
版本二(优化一):
class PrimeNumberTest2
{
public static void main(String[] args)
{
long start = System.currentTimeMillis();//记录开始的时间,以毫秒。
boolean isFlag = true;
int count = 0;//记录质数的个数
for (int i=1;i<=100000 ;i++ )//遍历1到100000个数
{
for (int j = 2;j < i ;j++ )
{
if(i % j == 0){//进行逐个判断
isFlag = false;
break;//优化一:针对非质数进行优化
}
}
if (isFlag)
{
System.out.println(i);
count++;
}
isFlag = true;
}
long end = System.currentTimeMillis();//记录结束的时间
System.out.println("质数的个数" + count);
System.out.println("所花费的时间" + (end - start));
}
}
下面是执行后所用的结果及时间:

运行时间为:2140毫秒(不同计算机可能有差别,但是应该很小)
版本三(优化二):
class PrimeNumberTest2
{
public static void main(String[] args)
{
long start = System.currentTimeMillis();//记录开始的时间,以毫秒。
boolean isFlag = true;
int count = 0;//记录质数的个数
for (int i=1;i<=100000 ;i++ )//遍历1到100000个数
{
for (int j = 2;j <= Math.sqrt(i) ;j++ )//优化二:减少循环次数,针对本身就是质数的优化
{
if(i % j == 0){//进行逐个判断
isFlag = false;
break;//优化一:针对非质数进行优化
}
}
if (isFlag)
{
System.out.println(i);
count++;
}
isFlag = true;
}
long end = System.currentTimeMillis();//记录结束的时间
System.out.println("质数的个数" + count);
System.out.println("所花费的时间" + (end - start));
}
}
下面是执行后所用的结果及时间:

运行时间为:537毫秒(不同计算机可能有差别,但是应该很小)
本文介绍了使用Java优化求100000以内的质数,通过逐步优化,从初始版本的18496毫秒运行时间,优化到第二版的2140毫秒,再到最终版的537毫秒,显著提升了算法效率。
947





