[C语言]用指针保存小于或等于lim的所有素数
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 100010 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; } } } 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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通