PTA-小於m的最大的10個素數 (15分)

kaiaaaa發表於2020-10-23

7-84 小於m的最大的10個素數 (15)

給定一個整數m(50<m<20000),找出小於m的最大的10個素數。

輸入格式:

輸入在一行中給出一個正整數m(50<m<20000)。

輸出格式:

在一行中按遞減順序輸出10個滿足條件的素數,每個素數輸出佔6列。沒有其它任何附加格式和字元。

輸入樣例:

229

輸出樣例:

   227   223   211   199   197   193   191   181   179   173

程式碼:

#include<iostream>
using namespace std;
#include<string>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<vector>
#include <numeric>
#include<cmath>

int main()
{
    int m;
    cin>>m;
    vector<int>v;
    for(int i=2;i<m;i++)
    {
        int p=0;
        for(int j=1;j<=i;j++)
        {
            if(i%j==0)
            {
                p++;
            }
            
        }
        if(p==2)
            v.push_back(i);
    }
    sort(v.begin(), v.end(), greater<int>());
    for(int i=0;i<10;i++)
    printf("%6d",v[i]);
}

提交的時候只過了兩個測試點,有一個測試點沒有通過

提交時間狀態分數題目編譯器耗時使用者
2020/10/23 14:15:45部分正確127-84C++ (g++)5 ms1910120306
測試點提示結果分數耗時記憶體
0sample等價,最大最小之間的素數m答案正確105 ms380 KB
1最小m答案正確23 ms508 KB
2最大m執行超時00 KB

這是看到題目中m的範圍為50<m<20000),於是接下來用素數篩。

程式碼:

#include<iostream>
using namespace std;
#include<string>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<vector>
#include <numeric>
#include<cmath>
bool a[20001]={0};

int main()
{
    int m;
    cin>>m;
    vector<int>v;
    for(int i=2;i<m;i++)
    {
       if(a[i]==0)
       {
           for(int j=2;i*j<m;j++)
           {
               a[i*j]=1;
           }
           v.push_back(i);
       }
        
    }
    sort(v.begin(), v.end(), greater<int>());
    for(int i=0;i<10;i++)
    printf("%6d",v[i]);
}

就可以通過了。

相關文章