牛客网 PAT 算法历年真题 1003: 数素数 (20)
生活随笔
收集整理的這篇文章主要介紹了
牛客网 PAT 算法历年真题 1003: 数素数 (20)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1003:數素數 (20)
時間限制?1000 ms?內存限制?32768 KB?代碼長度限制?100 KB?判斷程序?Standard?(來自?小小)題目描述
令Pi表示第i個素數。現任給兩個正整數M <= N <= 10000,請輸出PM到PN的所有素數。輸入描述:
輸入在一行中給出M和N,其間以空格分隔。輸出描述:
輸出從PM到PN的所有素數,每10個數字占1行,其間以空格分隔,但行末不得有多余空格。輸入例子:
5 27輸出例子:
11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 89
97 101 103
思路分析:
這個題,判斷素數大家都會,重點是在于這個算法是否會超時,以及輸出格式的問題:
素數判斷:
除了1和它本身,沒有其他的因子,稱為素數, 可以看成 循環變量從2到n-1,但是,如果數非常大的話,這就很頭疼了,
咱們來簡化一下判斷素數的方法,比如n=9時,因為9開根等于3,所以,判斷到3就可以確定9不是素數,因此,循環變量i可以從2到根號下n,也就是【2-sqrt(n)】
當一個數被確認是素數時,就要輸出了,
輸出格式:
題目要求,10個一換行
那么咱就直接判斷count(從2開始累加的素數的個數),分為3種情況:
1.素數的位置小于題目要求的輸出范圍,即count<n,這時候,不輸出,繼續循環;
2.素數的位置在題目要求的輸出范圍,首先行內輸出素數,這時,素數后面的輸出,又分為3種情況:
①輸出的素數不是一行的第10個,即(count-m+1)%10!=0,
例如題目給的測試用例,m=5,當count=5時,(count-m+1)%10=1,當count=13時,(count-m+1)%10=9,
這個時候需要輸出一個空格“ ”; ②輸出的素數恰巧是一行的第10個,即(count-m+1)%10=0,
例如,當count=14時,(count-m+1)%10 = 0 ,這個時候需要輸出一個空行;
③數出的素數是要求輸出的最后一個,即count=n,這個時候,直接結束程序即可;
3.素數的位置大于題目要求的輸出范圍,其實,程序永遠都走不到這一步,當輸出的素數是要求輸出的最后一個時,在第二種情況的第三點已經結束程序啦
Java 代碼如下:
import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner sca = new Scanner(System.in);int m = sca.nextInt();int n = sca.nextInt();int count = 1;if(m == 1) {System.out.print(2);if(n == 1)return;elseSystem.out.print(" ");}int i = 3;while(true){if(f(i)) { //素數判斷count++; //素數數目+1if(count >= m) { //素數的位置在題目要求的輸出范圍System.out.print(i);// 行內輸出素數if(count==n){//數出的素數是要求輸出的最后一個,結束程序return;}if((count-m+1) % 10 != 0) {//①(count-m+1)%10!=0,輸出空格“ ”System.out.print(" ");}else { //①(count-m+1)%10==0,輸出空行 System.out.println();}}} i+=2;}}//判斷素數static boolean f(int x){for(int j = 2; j < Math.sqrt(x) + 1; j++) {if(x % j == 0) {return false;} }return true;} }
?
?轉載于:https://www.cnblogs.com/l199616j/p/10307179.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的牛客网 PAT 算法历年真题 1003: 数素数 (20)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ES6笔记(二)
- 下一篇: 微服务之迷思--转几位大牛的文章