习题5.1
#include <iostream>
#include <cmath>
using namespace std;
#define N 100 //定义宏常量100
void SiftPrime(int a[], int n);
void PrintPrime(int a[], int n);
int main() {
int a[N + 1];
cout << N << "以内的素数有:" << endl;
SiftPrime(a, N);
PrintPrime(a, N);
return 0;
}
void SiftPrime(int a[], int n) {
int i, j;
//初始化数组a,使a[2]=2, a[3]=3, ......, a[N]=N
for (i = 2; i < N; i++) {
a[i] = i;
}
//对i=2,3,......, sqrt(N),在a中筛掉a[i]的倍数
for (i = 2; i <= sqrt(N); i++) {
for (j = i + 1; j <= N; j++) {
//若a[j]是a[i]的倍数,则筛掉a[j]
if (a[i] != 0 && a[j] != 0 && a[j] % a[i] == 0) a[j] = 0;
}
}
}
void PrintPrime(int a[], int n) {
int i;
for (i = 2; i <= N; i++) {
if (a[i] != 0)cout << a[i] << endl;
}
}