Java題解—1013 數素數 (20 分)
阿新 • • 發佈:2021-10-15
原題
程式碼
記錯本
挺灰心的,害!
- 錯誤點一:對素數的認識不夠準確。以至於,漏掉了2是素數這個點,不是所有的偶數都不是素數!
- 錯誤點二:也是錯認為素數是從3開始,只計算了奇數。
- 錯誤點三:題意,應該是包含N和M。減2是為了迎合漏掉的素數2的位置,所以範圍控制錯了。
關於換行輸出:可以很好的利用count計數來判斷,不用額外增加變數。
錯誤的
package pat; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int m = scanner.nextInt(); int n = scanner.nextInt(); int count=0;//計數生成的素數個數 StringBuilder sb = new StringBuilder(); int prime=3;//錯誤點二 int newline=0; //素數生成器 while (count<=n-2) {//錯誤點三 if (isPrime(prime)){ count++; if (count>=m-1){//錯誤點三 sb.append(prime+" "); newline++;//累積換行輸出 if (newline%10==0) { System.out.println(sb.toString().trim()); sb=new StringBuilder(); }else if(count==n-1){//最後一次的輸出 System.out.print(sb.toString().trim()); } } } prime+=2;//錯誤點二 } } //完整的判斷素數 public static boolean isPrime(int num){ if (num<3) return false;//錯誤點一 if (Math.sqrt(num)<3&&num%2==0) return false; for (int j=3;j<=Math.sqrt(num);j+=2){ if (num%j==0||num%2==0){ return false; } } return true; } }
修改後正確的
package pat; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int m = scanner.nextInt(); int n = scanner.nextInt(); int count=0;//計數生成的素數個數 int prime=0;//遞增的素數 //素數生成器 while (count<n) { if (isPrime(prime)){ count++; if (count>=m){ if ((count-m+1)%10==0||count==n) {//當數字末尾時或最後一個數字時,換行 System.out.println(prime); }else System.out.print(prime+" "); } } prime++; } } //完整的判斷素數(2是素數) public static boolean isPrime(int num){ if (num==1) return false; if (num%2==0&&num!=2) return false;//不是偶數,排除2 for (int j=3;j<=Math.sqrt(num);j+=2){ if (num%j==0){ return false; } } return true; } }