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