1003 數素數(20)-JAVA

題目描述
令Pi表示第i個素數≈酰現任給兩個正整數M <= N <= 10000如叼,請輸出PM到PN的所有素數四啰。

輸入描述:
輸入在一行中給出M和N宁玫,其間以空格分隔。

輸出描述:
輸出從PM到PN的所有素數柑晒,每10個數字占1行欧瘪,其間以空格分隔,但行末不得有多余空格匙赞。

輸入例子:
5 27

輸出例子:
11 13 17 19 23 29 31 37 41 43

47 53 59 61 67 71 73 79 83 89

97 101 103



思路和知識點:

  • 素數:在大于1的整數中佛掖,只能被1和這個數本身整除的數妖碉,如2、3芥被、5欧宜、7、11拴魄。也叫質數冗茸。(1不是素數)
  • Math.sqrt(): JAVA中實現求一個數的平方根
  • 如何判斷一個數是否是素數?
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sann = new Scanner(System.in);
        int left = sann.nextInt();
        int right = sann.nextInt();
        int times = 0;//用來計數
        for(int i=1; ;i++){ //從1開始判斷每個數是否是素數
      
            if(isPrime(i)==true){
                times++;//如果是素數,計數加一
                if(times<right && times>=left){ //如果在要求的范圍內匹中,則要十個一行輸出
                    if((times-left+1)%10 == 0 ){
                        System.out.print(i);
                        System.out.print("\n");//輸出該數并換行
                    }else{
                        System.out.printf("%d ",i);//輸出該數并空格
                    }
                }
                if(times == right){
                        System.out.printf("%d",i);
                        break; //跳出for循環(huán)
                }
            }//end if
        }//end for;
    }
     
// //     判斷一個數是否是素數的方法
  public static boolean isPrime(int num){ 
    boolean flag = true; 
    if(num==1){ 
        flag = false;
    }
   if((num == 2 || num ==3)&& num!=1){
        flag = true;
    }else{ 
      for(int i=2;i<=Math.sqrt(num);i++ ){ 
        if(num%i==0){ 
          flag = false; 
          break; 
        } 
      } 
    } 
    return flag; 
  }     
}

哈哈哈哈哈哈夏漱,這道題實在折磨了我太長時間,網上找不到能編譯成功的算法顶捷,自己小白一個挂绰,從判斷素數的方法一句一句寫起來,中間各種報錯服赎,還是使用java不熟練葵蒂,很多語句都不太會寫,連數組的初始化都要百度ORZ··· 好在重虑,經過艱苦卓絕的頑強掙扎践付,終于把這道題解決了,相信以后寫算法的能力也能有所提升缺厉,畢竟這是嚴格意義上自己第一道獨立解決的算法題荔仁。
在此感謝LeetCode平臺,提供了算法在線編譯調試的平臺芽死,讓我能一步步的嘗試運行,從而找到自己原始版本中的錯誤次洼。
總結一下关贵,這道題做不出來的主要錯誤在于邏輯錯誤,好幾個地方都是我的if語句的邏輯沒有弄明白卖毁,幾個if語句之間相互并列反而沒有了需要的效果揖曾。
再次,向掙扎在算法路上的自己致敬亥啦!要繼續(xù)勇敢的不放棄的走下去炭剪!

開心.png


補充(以下僅是思路,沒有成功實現翔脱,可以不看奴拦,特此提醒):

在掙扎這道題的過程中,有看到關于素數判斷的一些相關理論届吁,包括孿生素數错妖,還有“素數都在六的倍數兩側绿鸣,但六的倍數兩側不一定都是素數≡萋龋”作為一個嚴謹又充滿好奇心的喵嗚潮模,我嘗試了一下以六為倍數增加的方法,第一次寫出來后在35這個數字這里卡住了痴施,因為35的開平方是5擎厢,而我的for循環(huán)從7開始,所以35這個數字沒有進入for循環(huán)進行判斷辣吃,調整后將判斷素數函數寫作如下:

// //     判斷一個數是否是素數的方法
  public static boolean isPrime(int num){  
     boolean flag = true;  
    if(num==1){  
        flag =false;
    }
   if((num == 2 || num ==3)&& num!=1){
        flag =true;
    }else{  
        if(num%6 != 1 && num%6!=5){
            flag = false;
        } else{
            if(num<49){  //小于7的平方的話动遭,就不開平了
                for(int i = 7;i<num-5;i+=6){
                    if(num%i == 0){
                         flag = false;
                        break;
                    }  
                }
            }else{
                    for(int i = 7;i<=Math.sqrt(num);i+=6){
                    if(num%i == 0){
                         flag = false;
                        break;
                    }  
                }
            }//end else
        }//end else
        }//end else
        
    return flag;
  }// end isPrime

在調試運行后,又發(fā)現25不是素數齿尽,但是根據我們的算法得到的是素數沽损,跟著邏輯走一邊,發(fā)現上述算法的確得到25時是true循头,說明上述算法有誤绵估。

想了一下,素數分布在6的倍數的兩側卡骂,不是在左側就是在右側国裳,也有可能左右兩側都是素數(6的倍數的左右兩側都是素數時,我們將這兩個素數稱作孿生素數)全跨,在我們上述算法中缝左,根據上述思想進行了以6為步數的躍進,但是從7開始+6的躍進只遍歷了6的倍數的右側浓若,而忽略了6的左側渺杉,而并不是每一個6的倍數的右側數字是素數的時候,左側也一定是素數(反之亦然)挪钓。所以這種算法在4*6=24的左側23(是素數)是越、右側25(不是素數)時,出現了判斷錯誤碌上。

如何解決上述錯誤倚评?那就只能左右兩側都進行判斷,可是這樣一來馏予,算法是不是更加復雜天梧?還不如原始算法?霞丧?

走到這一步已經耗盡我的腦細胞了呢岗,所以戛然止步。如果有過路的讀者有想法或者更好的意見,歡迎留言批評指正敷燎!

溜了溜了~~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末暂筝,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子硬贯,更是在濱河造成了極大的恐慌焕襟,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饭豹,死亡現場離奇詭異鸵赖,居然都是意外死亡,警方通過查閱死者的電腦和手機拄衰,發(fā)現死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門它褪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翘悉,你說我怎么就攤上這事茫打。” “怎么了妖混?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵老赤,是天一觀的道長。 經常有香客問我制市,道長抬旺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任祥楣,我火速辦了婚禮开财,結果婚禮上,老公的妹妹穿的比我還像新娘误褪。我一直安慰自己责鳍,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布兽间。 她就那樣靜靜地躺著薇搁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渡八。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天传货,我揣著相機與錄音屎鳍,去河邊找鬼。 笑死问裕,一個胖子當著我的面吹牛逮壁,可吹牛的內容都是我干的。 我是一名探鬼主播粮宛,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼窥淆,長吁一口氣:“原來是場噩夢啊……” “哼卖宠!你這毒婦竟也來了?” 一聲冷哼從身側響起忧饭,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤扛伍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后词裤,有當地人在樹林里發(fā)現了一具尸體刺洒,經...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年吼砂,在試婚紗的時候發(fā)現自己被綠了逆航。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡渔肩,死狀恐怖因俐,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情周偎,我是刑警寧澤抹剩,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站栏饮,受9級特大地震影響吧兔,放射性物質發(fā)生泄漏。R本人自食惡果不足惜袍嬉,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一境蔼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伺通,春花似錦逢唤、人聲如沸焕毫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽填大。三九已至,卻和暖如春膏执,著一層夾襖步出監(jiān)牢的瞬間悄谐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工矢空, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留航罗,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓屁药,卻偏偏與公主長得像粥血,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內容

  • 傳送門 https://pintia.cn/problem-sets/994805260223102976/pro...
    Rush的博客閱讀 1,645評論 0 1
  • 令Pi表示第i個素數「纯鳎現任給兩個正整數M <= N <= 104趾娃,請輸出PM到PN的所有素數。 輸入格式: 輸入在...
    小路_閱讀 560評論 0 0
  • 我的PAT系列文章更新重心已移至Github缔御,歡迎來看PAT題解的小伙伴請到Github Pages瀏覽最新內容抬闷。...
    OliverLew閱讀 920評論 0 1
  • 題目: 令Pi表示第i個素數。現任給兩個正整數M <= N <= 104刹淌,請輸出PM到PN的所有素數饶氏。 輸入格式:...
    tingshuo123閱讀 188評論 0 0
  • 令Pi表示第i個素數。現任給兩個正整數M <= N <= 104有勾,請輸出PM到PN的所有素數疹启。輸入格式:輸入在一行...
    虛幻的城堡閱讀 329評論 0 0