C语言实现埃拉托斯特尼筛法

这段 C 语言代码实现了一个埃拉托斯特尼筛法(Sieve of Eratosthenes)的变种,用于标记小于等于 n 的所有非素数(合数),并打印出每个素数及其筛掉的倍数。最后程序会不断读入用户输入的整数x,并输出prime[x]的值,用来判断x是否为素数。

#include<stdio.h> int prime[100] = {0}; void init_prime(int n) { prime[0] = prime[1] = 1; for (int i = 2; i * i <= n; i++) { if (prime[i]) continue; printf("%d is prime : ", i); for (int j = i * i; j <= n; j += i) { prime[j] = 1; printf(" %d", j); } printf("\n"); } return ; } int main() { init_prime(50); int x; while (scanf("%d", &x) != EOF) { printf("prime[%d] = %d\n", x, prime[x]); } return 0; }

这个代码是什么意思,请你详细解答

🧠 整体逻辑概览

  • 使用一个全局数组prime[100],初始化为全 0。
  • 数组含义: -prime[i] == 0表示i 是素数; -prime[i] == 1表示i 不是素数(被筛掉了)
  • init_prime(50):对 0~50 范围内的数进行筛法处理,并打印过程。
  • 主函数中循环读取输入,查询任意x是否为素数。

🔍 逐行详细解释

1. 头文件与全局变量

#include <stdio.h> int prime[100] = {0};
  • 引入标准输入输出库。
  • 定义一个大小为 100 的整型数组prime,所有元素初始化为 0。 - 这个数组将作为“筛子”:下标代表数字,值代表是否为合数。

2. 筛法函数init_prime(int n)

void init_prime(int n) { prime[0] = prime[1] = 1;
  • 0 和 1不是素数,所以直接标记为 1(即“非素数”)。
for (int i = 2; i * i <= n; i++) {
  • i = 2开始遍历到√n(因为大于 √n 的合数一定已被更小的因子筛过)。
if (prime[i]) continue;
  • 如果prime[i] == 1,说明i已经被标记为合数,跳过。
  • 只有当prime[i] == 0(即i是素数)时,才继续筛它的倍数。
printf("%d is prime : ", i);
  • 打印当前素数i
for (int j = i * i; j <= n; j += i) { prime[j] = 1; printf(" %d", j); }
  • i*i开始,把i的所有倍数(i*i, i*(i+1), ...)都标记为合数(prime[j] = 1)。
  • 同时打印这些被筛掉的数。

为什么从i*i开始?因为小于i*ii的倍数(如2*i, 3*i, ..., (i-1)*i)已经被更小的素数筛过了。

printf("\n"); } return ; }
  • 每处理完一个素数,换行。

3. 主函数main()

int main() { init_prime(50);
  • 对 0~50 的数执行筛法,并打印筛的过程。
int x; while (scanf("%d", &x) != EOF) { printf("prime[%d] = %d\n", x, prime[x]); }
  • 循环读取用户输入的整数x,直到遇到文件结束(EOF,比如在 Linux 下按 Ctrl+D,Windows 下按 Ctrl+Z)。
  • 输出prime[x]: - 如果输出0x是素数; - 如果输出1x不是素数。
return 0; }

🖨️ 示例运行输出(部分)

假设你运行程序后输入:

2 4 17 25

可能看到的输出(筛法过程 + 查询结果):

2 is prime : 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 3 is prime : 9 12 15 18 21 24 27 30 33 36 39 42 45 48 5 is prime : 25 30 35 40 45 50 7 is prime : 49 prime[2] = 0 prime[4] = 1 prime[17] = 0 prime[25] = 1

注意:12、18、30 等数会被多个素数重复筛(这是正常的,但效率略低;可优化,但不影响正确性)。


⚠️ 潜在问题或注意事项

  1. 数组越界风险: -prime数组大小是 100,但init_prime(50)是安全的(只用到下标 0~50)。 - 但如果用户输入x >= 100,比如x = 150,就会访问prime[150],导致未定义行为(可能崩溃或读到垃圾值)。 - ✅ 建议加判断:if (x < 0 || x >= 100) { printf("Out of range\n"); continue; }

  2. 命名反直觉: -prime[i] == 0表示是素数,这容易让人困惑。 - 更常见的做法是叫is_composite[]not_prime[],或者反过来:is_prime[i] = 1表示是素数。

  3. 打印干扰逻辑: - 打印筛的过程是为了演示,实际使用筛法时通常不打印。


✅ 总结

这段代码的核心是:

  • 用埃拉托斯特尼筛法预处理出 0~50 范围内所有素数
  • 通过一个布尔数组(用 int 模拟)快速查询任意数是否为素数
  • 交互式地让用户测试查询结果

它是一个很好的教学示例,展示了:

  • 筛法思想
  • 数组作为标记表的用法
  • C 语言的循环、条件、输入输出

如果你是为了学习素数判断或筛法,这段代码非常有价值!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1187761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qwen3-0.6B绘画实战:云端GPU 10分钟出图,2块钱玩一下午

Qwen3-0.6B绘画实战&#xff1a;云端GPU 10分钟出图&#xff0c;2块钱玩一下午 你是不是也和我一样&#xff0c;在小红书刷到那些AI生成的插画、海报、产品图&#xff0c;第一反应是“这也太惊艳了&#xff01;”&#xff1f;但接着往下看教程&#xff0c;发现动不动就要RTX 4…

QMK Toolbox:机械键盘爱好者的终极配置神器

QMK Toolbox&#xff1a;机械键盘爱好者的终极配置神器 【免费下载链接】qmk_toolbox A Toolbox companion for QMK Firmware 项目地址: https://gitcode.com/gh_mirrors/qm/qmk_toolbox 想要让机械键盘实现完全个性化的键位布局吗&#xff1f;QMK Toolbox作为QMK固件的…

Topit:让你的Mac窗口永远站在C位的智能神器

Topit&#xff1a;让你的Mac窗口永远站在C位的智能神器 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否曾经为了看个参考文档&#xff0c;在几十个窗口里…

终极流媒体下载指南:3步轻松获取高清视频内容

终极流媒体下载指南&#xff1a;3步轻松获取高清视频内容 【免费下载链接】N_m3u8DL-RE 跨平台、现代且功能强大的流媒体下载器&#xff0c;支持MPD/M3U8/ISM格式。支持英语、简体中文和繁体中文。 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE 还在…

FileSaver.js完全指南:实现跨浏览器文件下载的终极解决方案

FileSaver.js完全指南&#xff1a;实现跨浏览器文件下载的终极解决方案 【免费下载链接】FileSaver.js An HTML5 saveAs() FileSaver implementation 项目地址: https://gitcode.com/gh_mirrors/fi/FileSaver.js FileSaver.js是一个轻量级的JavaScript库&#xff0c;专门…

Qwen2.5显存溢出?轻量模型优化部署解决方案

Qwen2.5显存溢出&#xff1f;轻量模型优化部署解决方案 1. 背景与挑战&#xff1a;Qwen2.5-0.5B-Instruct 的轻量化部署需求 随着大语言模型&#xff08;LLM&#xff09;在实际业务场景中的广泛应用&#xff0c;如何在有限硬件资源下实现高效、稳定的推理服务成为关键问题。阿…

Bilibili-Evolved:解锁B站隐藏功能的终极工具

Bilibili-Evolved&#xff1a;解锁B站隐藏功能的终极工具 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved Bilibili-Evolved是一款功能强大的哔哩哔哩增强脚本&#xff0c;能够彻底改变你的B站…

AI智能二维码工坊一文详解:高容错编码技术实战应用

AI智能二维码工坊一文详解&#xff1a;高容错编码技术实战应用 1. 引言 1.1 业务场景描述 在现代数字化服务中&#xff0c;二维码已成为信息传递的重要载体&#xff0c;广泛应用于支付、身份认证、广告推广、设备绑定等多个领域。然而&#xff0c;传统二维码生成工具普遍存在…

QueryExcel:5分钟搞定100个Excel文件的数据查找

QueryExcel&#xff1a;5分钟搞定100个Excel文件的数据查找 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 还在为海量Excel文件中的数据查找而头疼吗&#xff1f;面对几十甚至上百个表格文件&#xf…

RexUniNLU递归式显式图式:处理复杂语义的新方法

RexUniNLU递归式显式图式&#xff1a;处理复杂语义的新方法 1. 引言&#xff1a;通用自然语言理解的挑战与突破 随着自然语言处理技术的发展&#xff0c;信息抽取任务已从单一任务模型逐步演进为多任务统一框架。传统方法通常针对命名实体识别、关系抽取或事件抽取等任务分别…

Awoo Installer:重新定义Switch游戏安装体验

Awoo Installer&#xff1a;重新定义Switch游戏安装体验 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为复杂的Switch游戏安装流程而烦恼吗&…

Unity开发者的Visual Studio快捷键终极指南

&#x1f3af; 核心必备快捷键&#xff08;每天使用&#xff09;代码导航类快捷键功能使用频率说明F12转到定义⭐⭐⭐⭐⭐最常用的导航键Ctrl Click点击跳转定义⭐⭐⭐⭐快速查看定义Alt F12速览定义⭐⭐⭐⭐不离开当前文件查看定义Ctrl ,导航到&#xff08;文件/类型/成员&…

Qwen3-4B工具推荐:Docker镜像免配置快速上手

Qwen3-4B工具推荐&#xff1a;Docker镜像免配置快速上手 1. 简介 Qwen3-4B-Instruct-2507 是阿里开源的一款高性能文本生成大模型&#xff0c;属于通义千问系列的最新迭代版本。该模型在多个维度实现了显著优化&#xff0c;适用于广泛的自然语言处理任务&#xff0c;包括但不…

深度解析Voice Sculptor:指令化语音合成的核心技术

深度解析Voice Sculptor&#xff1a;指令化语音合成的核心技术 1. 技术背景与核心价值 近年来&#xff0c;语音合成技术经历了从传统参数化方法到端到端深度学习模型的跨越式发展。随着大语言模型&#xff08;LLM&#xff09;和多模态理解能力的提升&#xff0c;指令化语音合…

BERT-base-chinese文本匹配:相似度阈值

BERT-base-chinese文本匹配&#xff1a;相似度阈值 1. 技术背景与问题提出 在中文自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;语义相似度计算是构建智能系统的核心能力之一。无论是智能客服中的意图识别、舆情分析中的观点聚合&#xff0c;还是推荐系统中的内…

终极代理管理工具ZeroOmega:5分钟掌握完整使用方案

终极代理管理工具ZeroOmega&#xff1a;5分钟掌握完整使用方案 【免费下载链接】ZeroOmega Manage and switch between multiple proxies quickly & easily. 项目地址: https://gitcode.com/gh_mirrors/ze/ZeroOmega 还在为频繁切换代理而烦恼吗&#xff1f;ZeroOme…

MinerU网页内容提取实战:预置镜像开箱即用,5分钟上手仅2元

MinerU网页内容提取实战&#xff1a;预置镜像开箱即用&#xff0c;5分钟上手仅2元 你是不是也遇到过这样的情况&#xff1a;作为市场分析师&#xff0c;需要定期抓取竞品官网的产品信息、价格变动、功能更新来做对比分析&#xff0c;但公司电脑禁止安装任何第三方软件&#xf…

Umi-OCR终极使用指南:从零开始掌握离线OCR识别技巧

Umi-OCR终极使用指南&#xff1a;从零开始掌握离线OCR识别技巧 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHub_…

Umi-OCR实战宝典:从截图到批量处理,彻底告别手动输入的低效时代

Umi-OCR实战宝典&#xff1a;从截图到批量处理&#xff0c;彻底告别手动输入的低效时代 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: http…

3分钟极速上手:前端Word文档生成神器实战全解

3分钟极速上手&#xff1a;前端Word文档生成神器实战全解 【免费下载链接】html-docx-js Converts HTML documents to DOCX in the browser 项目地址: https://gitcode.com/gh_mirrors/ht/html-docx-js 还在为网页内容无法直接导出为专业Word文档而烦恼吗&#xff1f;传…