1013 數素數 (20分)/c++實現
令 Pi 表示第 i 個素數。現任給兩個正整數 M≤N≤104,請輸出 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
思路:
1、建立一個大小為max動態陣列來接受素數,因為第10000個素數是104729,在遍歷尋找判斷素數需要大於104729。
2、是用容器來寫,思路同上,容器的方法我覺得更加精簡。
動態陣列程式碼:
#include<iostream>
#include<cmath>
using namespace std;
bool isprime(int a)
{
bool flag = true;
for (int j = 2; j <=sqrt(a); j++)
{
if (a % j == 0) //判斷a不是素數
{
flag = false;
break;
}
}
return flag;
}
int main()
{
int min, max, count = 1, count1 = 1,count2=1;
cin >> min >> max;
int* pd = new int[max];
pd[0] = 1;
for (int i = 2; i <=105000; i++)
{
if (isprime(i))
{
if (count<=max)
{
pd[count] = i;
count++;
}
}
}
for (int i =min; i <=max; i++)
{
cout << pd[i];
if (count1 % 10 != 0 && count2<(max-min+1))
{
cout << " ";
}
else
cout << endl;
count1++;
count2++;
}
delete []pd;
return 0;
}
容器程式碼:
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
bool isPrime(int a)//判斷是否為素數
{
bool flag = 1;
for (int i = 2; i <= sqrt(a); i++){
if (a % i == 0){
flag = 0;
return flag;
}
}
return flag;
}
int main()
{
int min, max;
cin >> min >> max;
vector<int>v;
for (int i = 1; i < 105000; i++){//第10000個素數是104729
if(isPrime(i))
v.push_back(i);//如果是素數,就插入到容器中
if (v.size() == max+1)//如果達到了題目要求的最大素數數目+1(因為1不是素數,所以會佔一個位置為v[0])停止迴圈
break;
}
for (int i = min; i < v.size(); i++){
cout << v[i];
if ((i - min+1) % 10 != 0 && i != max)//每整除10換行,不到10輸出空格,i!=max保證輸出最後一個數後面沒有空格
cout << " ";
else
cout << endl;
}
return 0;
}
相關文章
- PAT1013數素數C++C++
- PAT-B 1013 數素數 【素數】
- [PAT B] 1013 數素數 -未完成
- 簡單的素數問題(C++)C++
- 素數
- 數論(1):素數
- 任意進位制下的可逆素數 C++C++
- C++ :引用計數(reference count) 實現C++
- PAT-B 1007 素數對猜想【素數】
- 素數篩
- 【數論】素數篩法
- C++ 大整數類(BigInteger類)實現C++
- 素數判斷
- 素數 UVA 406
- 最強素數
- 判斷素數
- LeetCode題庫13. 羅馬數字轉整數(c++實現)LeetCodeC++
- C++反射機制:可變引數模板實現C++反射C++反射
- C++反射機制:可變引數模板實現C++反射薦C++反射
- C++反射機制:可變引數模板實現C++反射(二)C++反射
- 美素數 hd 4548
- 素數判定 hd 2012
- 計算素數【Java】Java
- 初等數論——素數,逆元,EXGCD有關GC
- C++實現以秒為單位的計數器C++
- 第六章 數學問題 ----------6.13 素數的篩法(第十萬零二個素數)
- C++實現10個數前m個數和後10-m轉換位置C++
- 素數個數 <埃式篩 && 尤拉篩>
- 如何高效尋找素數
- 密碼工程-大素數密碼
- 【數學問題】判斷一個數是否是素數
- 利用 C++ 11 特性實現多執行緒計數器C++執行緒
- LeetCode刷題:數學篇(C++實現,持續更新中...)LeetCodeC++
- 大數相乘(浮點數)實現
- 求十個連續最小自然數,非素數。
- L1-028 判斷素數 分數 10
- 分拆素數和 hd 2098
- [PAT B] 1007 素數對猜想