PAT1013數素數C++
PAT1013數素數
題目:
1013 數素數 (20分)
令 Pi 表示第 i 個素數。現任給兩個正整數 M≤N≤10000,請輸出 PM到 PN的所有素數。
輸入格式:
輸入在一行中給出 M 和 N,其間以空格分隔。
輸出格式:
輸出從 PM 到 PN 的所有素數,每 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
程式碼:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int M,N;
cin>>M>>N;
int a[10000]; //儲存素數值,陣列下標代表了是第幾個素數
int k=0,m=0;
int flag;
int i=2;
a[0]=2; //指明第一個素數
while(k<=N)
{
flag=0;
for(int j=2;j<=sqrt(double(i));j++) //1.sqrt()裡面是double型 的數,但i是int型的,要轉化一下
//2.若直接用j<i,第四個測試點會執行超時。
{
if(i%j==0)
{
flag=1;
break;
}
}
if(flag==0)
{
k++;
a[k]=i;
}
i++;
}
for(int i=M;i<N;i++)
{
cout<<a[i];
m++;
if(m%10==0) //設定輸出格式
cout<<endl;
else
cout<<' ';
}
cout<<a[N];
system("pause");
return 0;
}
注意:
- 最開始,我用的是一個for迴圈來限制值,這樣不好確定 i 的範圍。網上查了一下第10000個素數大概是10500左右,但這樣每次都要計算出10000個素數,不太方便。也可能會產生執行超時,第四個測試點通不過的問題。後來選用一個while迴圈,改善了一下。
for(int i=0;i<10500;i++)
{
} - 最開始在判斷一個數 i 是否為素數時,我採用的是用 i 除以 從2到i-1的所有數,看看餘數是否為0;這樣會導致執行超時,第四個測試點通不過,改善了一下,用 i 除以從2 到sqrt(i) 的所有數,這可能是這道題要考察的點,要學會適當優化程式。
相關文章
- 素數迴文——輸出兩整數之間所有既是迴文數又是素數的數 C++實現C++
- 1013 數素數 (20分)/c++實現C++
- 簡單的素數問題(C++)C++
- ACM 素數ACM
- 任意進位制下的可逆素數 C++C++
- Prime Palindromes( 素數迴文) C++實現C++
- 素數計數函式函式
- 【數論】素數篩法
- 求素數(質數)演算法演算法
- 計算素數【Java】Java
- Find Terrorists(素數篩選+素因子分解)Error
- 初等數論——素數,逆元,EXGCD有關GC
- 素數個數 <埃式篩 && 尤拉篩>
- 表示素數的函式函式
- 密碼工程-大素數密碼
- 如何高效尋找素數
- [演算法]: 素數篩法演算法
- 【演算法】數學之旅,根據素數特徵尋找底數演算法特徵
- L1-028 判斷素數 分數 10
- 面試官本拿求素數搞我,但被我優雅的“回擊“了(素數篩)面試
- 1354: 素數判定(C語言)C語言
- c語言 構造素數表C語言
- 計算2..n的素數
- Miller-Rabin素數快速檢測
- HDU 4497GCD and LCM(素數分解)GC
- 6-2 計算素數和
- 素數判定演算法 初級演算法
- Python演算法實現質數(素數)判斷Python演算法
- 面試官本拿求素數搞我,但被我用素數篩優雅的“回擊“了面試
- C語言判斷素數,判斷質素演算法C語言演算法
- 統計位數為偶數的數字(C++)C++
- 計算 1-100 的素數
- Diff-prime Pairs(思維+素數篩)AI
- C語言實驗——素數 (sdut oj)C語言
- 演算法一百以內的素數演算法
- HDU 4497 GCD and LCM(拆素數+組合)GC
- C++ 隨機數C++隨機
- 【c++】引用計數C++