当前位置: 首页 > news >正文

素数查找程序

可以通过控制台选择模式,并按照提示输入数据,程序会输出相应结果。

java

import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * 素数查找程序 * 功能:1. 输出 2 到 N 之间的所有素数 * 2. 判断一个正整数是否为素数 */ public class PrimeFinder { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("======= 素数查找器 ======="); System.out.println("请选择功能:"); System.out.println("1. 查找指定范围内的所有素数"); System.out.println("2. 判断一个数是否为素数"); System.out.print("请输入选项 (1 或 2): "); int choice; try { choice = scanner.nextInt(); } catch (Exception e) { System.out.println("输入无效,请输入数字 1 或 2。"); scanner.close(); return; } switch (choice) { case 1: findPrimesInRange(scanner); break; case 2: checkPrimeNumber(scanner); break; default: System.out.println("无效选项,请重新运行程序并输入 1 或 2。"); } scanner.close(); } /** * 模式1:查找并输出 [2, max] 内的所有素数 */ private static void findPrimesInRange(Scanner scanner) { System.out.print("请输入正整数上限 N (N >= 2): "); int N; try { N = scanner.nextInt(); if (N < 2) { System.out.println("上限不能小于 2,没有素数可输出。"); return; } } catch (Exception e) { System.out.println("输入无效,请输入正整数。"); return; } List<Integer> primes = sieveOfEratosthenes(N); System.out.println("2 到 " + N + " 之间的素数共有 " + primes.size() + " 个:"); // 每行输出 10 个素数,格式化显示 int count = 0; for (int prime : primes) { System.out.printf("%-5d", prime); count++; if (count % 10 == 0) { System.out.println(); } } System.out.println(); // 换行 } /** * 模式2:判断一个正整数是否为素数 */ private static void checkPrimeNumber(Scanner scanner) { System.out.print("请输入要判断的正整数: "); int num; try { num = scanner.nextInt(); if (num < 2) { System.out.println(num + " 不是素数(素数定义要求大于1)。"); return; } } catch (Exception e) { System.out.println("输入无效,请输入正整数。"); return; } boolean isPrime = isPrimeOptimized(num); if (isPrime) { System.out.println(num + " 是素数。"); } else { System.out.println(num + " 不是素数。"); } } /** * 埃拉托斯特尼筛法:返回 [2, max] 内所有素数 * 时间复杂度 O(n log log n),空间复杂度 O(n) */ private static List<Integer> sieveOfEratosthenes(int max) { boolean[] isPrime = new boolean[max + 1]; // 初始化,假设 2..max 都是素数 for (int i = 2; i <= max; i++) { isPrime[i] = true; } for (int i = 2; i * i <= max; i++) { if (isPrime[i]) { // 从 i*i 开始标记,因为更小的倍数已被处理 for (int j = i * i; j <= max; j += i) { isPrime[j] = false; } } } List<Integer> primes = new ArrayList<>(); for (int i = 2; i <= max; i++) { if (isPrime[i]) { primes.add(i); } } return primes; } /** * 优化的试除法判断素数: * - 单独处理 2 和偶数 * - 只需检查到 sqrt(n) 的奇数因子 */ private static boolean isPrimeOptimized(int n) { if (n < 2) return false; if (n == 2) return true; if (n % 2 == 0) return false; int limit = (int) Math.sqrt(n); for (int i = 3; i <= limit; i += 2) { if (n % i == 0) { return false; } } return true; } }

程序说明

1. 功能选择

  • 运行后输入1进入范围查找模式,输入2进入单数判断模式。

2. 范围查找(模式1)

  • 使用埃拉托斯特尼筛法快速生成所有不超过N的素数。

  • 输出素数个数,并按每行10个的格式打印素数。

3. 单数判断(模式2)

  • 使用优化的试除法(只检查到平方根,并跳过偶数)判断输入的正整数是否为素数。

http://www.cnnetsun.cn/news/2903599.html

相关文章:

  • 链表解题总结
  • 40外语专业学生如何用 AI 训练翻译、口语和跨文化表达能力
  • M68000编程模型与指令集深度解析:从经典架构到现代编程思维
  • 微信开放平台接入AI智能体:超级App变身Agent平台
  • 抖音无水印下载终极指南:免费批量下载工具完全教程
  • Boss Show Time:招聘信息时间可视化的终极解决方案
  • 大语言模型如何革新用户去匿名化技术
  • 深度解析constexpr-8cc架构:从ELVM IR到编译时计算
  • 无人配送车全解析:从技术原理到未来市场,一篇读懂
  • 告别手动刷百鬼夜行:阴阳师脚本如何让碎片收集效率提升300%
  • 别再乱用字符串存日期了!GaussDB日期/时间类型与TO_DATE、TO_CHAR函数的最佳实践
  • 3分钟搞定扫描文档优化:ScanTailor让纸质文档秒变电子版
  • 5分钟掌握Rufus:免费USB启动盘制作工具终极指南
  • Python 爬虫实战:雪球社区投资观点数据爬取与分析
  • Python 高手编程系列三千三百八十八:微观分析
  • TTS-Vue:从命令行到语音合成的桌面应用开发实战
  • 突破性城通网盘解析工具:告别限速,实现高速下载的革命性方案
  • 欧洲AI展会倒计时30天:技术交付、合规验证与实时性攻坚
  • 私有化视频会议系统EasyDSS功能升级:解决企业远程培训的三大“老大难”问题
  • 如何用Java跨平台MSG文件查看器告别Outlook依赖
  • 3分钟搞定双语歌词:LrcHelper开源工具的完整使用指南
  • 开源游戏串流的技术挑战与Sunshine低延迟解决方案
  • 3步解锁华硕笔记本终极性能秘籍:G-Helper完整实战指南
  • 怎样轻松实现游戏无边框窗口:5个高效技巧提升你的多任务体验
  • 2026年阿里云云服务器Hermes Agent部署与百炼Token Plan配置教程
  • TranslucentTB终极指南:深入解析Windows任务栏透明化核心技术
  • DragonBonesJS开发工具链推荐:提升动画制作效率的10个必备工具
  • ViGEmBus虚拟游戏控制器驱动完全指南:Windows内核级输入设备模拟终极方案
  • Docker本地部署大语言模型:vLLM+AWQ实战指南
  • 告别AT指令!用Arduino IDE玩转ESP8266的Wi-Fi与TCP通信(NodeMCU实战)