輸出100內所有質數
質數:素數,只能被1和他本身整除的自然數。
方法一
class Test {
public static void main(String[] args) {
boolean isFlag = true;//標識i是否被j除盡,一旦除盡,重新定義其值
for(int i = 2;i <= 100;i++){//遍歷100以內的自然數
for(int j = 2;j < i;j++){//j:被i除去
if(i % j == 0){
isFlag = false;
}
}
if(isFlag == true){
System.out.println(i);
}
//對isFlag重置
isFlag = true;
}
}
}
對方法一進行優化
class Test {
public static void main(String[] args) {
boolean isFlag = true;//標識i是否被j除盡,一旦除盡,修改其值
int count = 0;//記錄質數的個數
//獲取當前時間距離1970-01-01 00:00:00 的毫秒數
long start = System.currentTimeMillis();
for(int i = 2;i <= 100000;i++){//遍歷100000以內的自然數
//優化二:對本身是質數的自然數是有效的。
//原先的for(int j = 2;j < i;j++){//j:被i去除
//優化後
for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除,調用math中的一個2方法。
if(i % j == 0){ //i被j除盡
isFlag = false;
break;//優化一:只對本身非質數的自然數是有效的。
}
}
//
if(isFlag == true){
//System.out.println(i);
count++;
}
//重置isFlag
isFlag = true;
}
//獲取當前時間距離1970-01-01 00:00:00 的毫秒數
long end = System.currentTimeMillis();
System.out.println("質數的個數爲:" + count);
System.out.println("所花費的時間爲:" + (end - start));//17110 - 優化一:break:1546 - 優化二:13
}
}
方法二
class Test {
public static void main(String[] args) {
for(int i = 2;i <= 100;i++){//遍歷100以內數
boolean isFlag = true;//標識i是否被j除盡,一旦除盡,重新定義其值
for(int j = 2;j < i;j++){//j:被i除去
if(i % j == 0){
isFlag = false;
}
}
if(isFlag == true){
System.out.println(i);
}
}
}
}
方法三(直接在方法一優化的基礎上修改)
class Test {
public static void main(String[] args) {
int count = 0;//記錄質數的個數
//獲取當前時間距離1970-01-01 00:00:00 的毫秒數
long start = System.currentTimeMillis();
label:for(int i = 2;i <= 100000;i++){//遍歷100000以內的自然數
for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除,調用math中的一個方法,開根號。
if(i % j == 0){ //i被j除盡
continue label;//如果發現直接被除盡,重新回到label,
}
}
//能執行到此步驟的都是質數
count++;
}
//獲取當前時間距離1970-01-01 00:00:00 的毫秒數
long end = System.currentTimeMillis();
System.out.println("質數的個數爲:" + count);
System.out.println("所花費的時間爲:" + (end - start));//17110 - 優化一:break:1546 - 優化二:13
}
}