样例解释:1013 数素数 (20分)
生活随笔
收集整理的這篇文章主要介紹了
样例解释:1013 数素数 (20分)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
立志用更少的代碼做更高效的表達
Pat乙級最優化代碼+題解+分析匯總——>傳送門
令 P?i表示第 i 個素數。現任給兩個正整數 M≤N≤10^?4 ,請輸出 P?M到 P?N的所有素數。
輸入格式:
輸入在一行中給出 M 和 N,其間以空格分隔。
輸出格式:
輸出從 P?M到 P?N的所有素數,每 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
解題思路
本題的核心考點為:篩選法求某一區間的素數。
說明:篩選法可求某一數字區間的所有數字是否為素數, 且時間復雜度極低。
應用場景: 打表。 事先定義數組,利用篩選法,求得該數組所有數字下標是否為素數。 為接下來的判斷操作做準備。
理解篩選法后,本題就很好做了,只需要輸出相應區間即可
注意: 數組要開的大一些, 第四個樣例規模非常大。
類型題——>1007 素數對猜想
代碼實現
#include<bits/stdc++.h> #define Max 1000005 using namespace std; int vis[Max]; void Screen() {vis[0] = vis[1] = 1;for(int i = 2; i <= sqrt(Max); i++) for(int j = i*2; j <= Max; j+= i) vis[j] = 1;}int main() {Screen();int a, b; cin>>a>>b;int num = 0, num1 = 0;for(int i = 0; i < Max; i++) if(vis[i] == 0) {++num; //判斷區間的 if(num>=a && num<=b) {++num1; //夠10個就換行 if(num1 != 1) putchar(' ');cout << i; if(num1==10 && num!=b) {num1 = 0; putchar('\n');} } }return 0; }每日一句
他日若遂凌云志,敢笑黃巢不丈夫。
總結
以上是生活随笔為你收集整理的样例解释:1013 数素数 (20分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 极简代码:1012 数字分类 (20分)
- 下一篇: 假设你有一个数组,其中第i 个元素是第i