求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毫秒(不同計算機可能有差別,但是應該很小)