1、题目

编写一个函数,用指针保留小于或等于 lim 的所有素数

要求:

  • 1、不要在子函数中输入
  • 2、不要批改子函数。应用子函数void GetPrime(int lim,intnum,intx)

示例:

输出:20
输入:num=8
2,3,5,7,11,13,17,19

2、残缺代码

2.1 C语言版本

#include <stdio.h>//宏定义布尔类型#define BOOL int#define TRUE 1#define FALSE 0#define N 100010BOOL st[N];void GetPrime(int lim, int* num, int* x){    for (int i = 2; i <= lim; ++i)    {        if (!st[i])        {            x[*num] = i;            (*num)++;        }        for (int j = 0; j < *num && i * x[j] <= lim; ++j)        {            st[i * x[j]] = TRUE;            if (i % x[j] == 0)                 break;        }    }}void main(){    int x;    int cnt = 0;    int result[N];    BOOL flag = FALSE;    scanf_s("%d", &x);    GetPrime(x, &cnt, result);    printf("num=%d\n", cnt);    for (int i = 0; i < cnt; ++i)    {        if (flag)            printf(",");        else flag = TRUE;        printf("%d", result[i]);    }    return 0;}

2.2 C++版本

#include <iostream>using namespace std;const int N = 1e5 + 10;bool st[N];void GetPrime(int lim, int *num, int *x){        for(int i = 2; i <= lim; ++i)    {        if(!st[i])         {            x[*num] = i;            (*num) ++;        }        for(int j = 0; j < *num && i * x[j] <= lim; ++j)        {            st[i * x[j]] = true;            if(i % x[j] == 0) break;        }    }}int main(){    int x;    int cnt = 0;    int result[N];    bool flag = false;        cin >> x;        GetPrime(x, &cnt, result);    printf("num=%d\n", cnt);        for(int i = 0; i < cnt; ++i)     {        if(flag)            printf(",");        else flag = true;        printf("%d", result[i]);    }        return 0;}

3、截图