1. 题目描述及在线测试位置
1.1 打印出对应的素数
1.2 在线测试位置:PAT1013 数素数
2. 具体实现
2.1 基本思路
1.空间换时间:数组a的下标代表具体的数字,该数字若为素数,对应的数组元素值为true
2.我们知道:数字0和1非素数,2、3的倍数非素数,按这个思路将非素数都标记出来:赋值为false(请参考如下的Prime函数)
3.按要求打印对应的素数,注意题目要求的格式
bool a[MAX];
for (int i = 0; i <MAX; i++)
a[i] = true;
void Prime(bool a[], int N)
{
a[0] = a[1] = false;
for (int i = 2; i <N; i++)
{
if (a[i])
{
int multiple = 2;
while (i * multiple <N)
{
a[i * multiple] = false;
multiple++;
}
}
}
return;
}
2.2 AC代码
#include <iostream>
using namespace std;
#define MAX 1000000
void Prime(bool a[], int N);
int main()
{
int m, n,count=0,lineNumber=0;
cin >> m >> n;
bool a[MAX];
for (int i = 0; i <MAX; i++)
a[i] = true;
Prime(a, MAX);
for (int i = 2; i <MAX; i++)
{
if (a[i])
{
count++;
if (count > n) break;
if (count>=m && lineNumber == 0)
{
cout << i;
lineNumber++;
}
else if (count > m && count<=n )
{
cout << " " << i;
lineNumber++;
}
if (lineNumber == 10)
{
cout << endl;
lineNumber = 0;
}
}
}
return 0;
}
void Prime(bool a[], int N)
{
a[0] = a[1] = false;
for (int i = 2; i <N; i++)
{
if (a[i])
{
int multiple = 2;
while (i * multiple <N)
{
a[i * multiple] = false;
multiple++;
}
}
}
return;
}