PAT(Basic Level)Practice(中国語)B 1013数素数(20分)(C++)(2つの方法、エジプトふるい法)
14312 ワード
1013素数(20点)
P iにi番目の素数を示す.現在2つの正の整数M≦N≦104を与えて、PMからPNのすべての素数を出力してください.
入力形式:
入力は1行に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
P iにi番目の素数を示す.現在2つの正の整数M≦N≦104を与えて、PMからPNのすべての素数を出力してください.
入力形式:
入力は1行に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
//
using namespace std;
#include
#include
#include
const int MAX = 1000000;//
int Prime[10010] = {
0};//
int P[MAX] = {
0};
int main()
{
int M, N, top = 1;
scanf("%d %d", &M, &N);
for(int i=2; top<=N; i++)//
{
if(!P[i])
{
Prime[top++] = i;
for(int j = i+i; j<MAX; j+=i) P[j] = 1;
}
}
for(int i=M, cnt=1; i<N; i++, cnt++)//
{
if(cnt<10) printf("%d ", Prime[i]);
else printf("%d
", Prime[i]), cnt = 0;
}
printf("%d", Prime[N]);
return 0;
}
#include
#include
#include
int main()
{
int M = 0, N = 0;
int cnt1 = 1, cnt2 = 0;//cnt1 ;cnt2 10
scanf("%d %d", &M, &N);
if (M == 1)// 2 , 2
{
printf("2");
cnt2++;
if (cnt1 == N) return 0;
}
int first = 0;
for (int i = 3; cnt1 <= N; i+=2)//
{
int flag = 0;
for (int j = 3; j <= (int)sqrt((double)i); j += 2)//
{
if (i%j == 0)
{
flag = 1;//
break;
}
}
if (!flag)
{
cnt1++;
if (cnt1 >= M && cnt1 <= N)// M~ N ,
{
cnt2++;
if (cnt2 == 1) printf("%d", i);
else if (cnt2 == 10) {
printf(" %d
", i); cnt2 = 0; }
else printf(" %d", i);
}
}
}
return 0;
}