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

prime numbers

一、什么是素数
素数(Prime Number),又称质数,是指在大于1的自然数中,只能被1和它本身整除的数。
例如:
2、3、5、7、11、13、17、19...
都是素数。
而下面这些数不是素数:
4 = 2 × 2
6 = 2 × 3
8 = 2 × 4
9 = 3 × 3
因为它们除了1和自身外,还能被其他整数整除。
二、素数的特点

  1. 1不是素数
    因为素数必须恰好有两个正因数:
    1 和自身
    而数字1只有一个因数:
    1
    因此:
    1 不是素数

  2. 2是唯一的偶数素数
    除了2以外:
    4、6、8、10...
    都能被2整除,因此不是素数。
    所以:
    2 是唯一的偶数素数

  3. 所有素数只能被1和自身整除
    例如:
    13
    它只能被:
    1 和 13
    整除。
    三、判断素数的基本思路
    判断一个数字n是否为素数:
    方法一:逐个试除
    检查:
    2 ~ n-1
    之间是否存在能整除n的数。
    例如判断13:
    13 ÷ 2
    13 ÷ 3
    13 ÷ 4
    ...
    13 ÷ 12
    如果都不能整除,则13是素数。
    Java实现
    public class PrimeTest {
    public static void main(String[] args) {

    int n = 13;
    boolean isPrime = true;

    for(int i = 2; i < n; i++) {
    if(n % i == 0) {
    isPrime = false;
    break;
    }
    }

    if(isPrime) {
    System.out.println(n + "是素数");
    } else {
    System.out.println(n + "不是素数");
    }
    }
    }
    运行结果:
    13是素数
    四、优化算法
    实际上不需要检查到:
    n - 1
    只需要检查到:
    √n
    即可。
    原理
    假设:
    n = a × b
    如果:
    a > √n
    并且
    b > √n
    那么:
    a × b > n
    矛盾。
    因此:
    至少有一个因子小于等于√n
    只需检查到平方根即可。
    优化后的代码
    public class PrimeTest {
    public static void main(String[] args) {

    int n = 97;
    boolean isPrime = true;

    for(int i = 2; i <= Math.sqrt(n); i++) {
    if(n % i == 0) {
    isPrime = false;
    break;
    }
    }

    if(isPrime) {
    System.out.println(n + "是素数");
    } else {
    System.out.println(n + "不是素数");
    }
    }
    }
    五、输出100以内所有素数
    实现思路
    外层循环:
    2~100
    依次判断。
    内层循环:
    检查是否存在因子
    Java代码
    public class PrimeNumbers {

    public static void main(String[] args) {

    for(int num = 2; num <= 100; num++) {

    boolean isPrime = true;

    for(int i = 2; i <= Math.sqrt(num); i++) {
    if(num % i == 0) {
    isPrime = false;
    break;
    }
    }

    if(isPrime) {
    System.out.print(num + " ");
    }
    }
    }
    }
    运行结果:
    2 3 5 7 11 13 17 19 23 29
    31 37 41 43 47 53 59 61
    67 71 73 79 83 89 97
    六、埃拉托斯特尼筛法
    当需要寻找大量素数时,可以使用更高效的算法:
    筛法思想
    以100以内素数为例:
    首先写出:
    2~100
    然后:
    保留2
    删除2的倍数
    保留3
    删除3的倍数
    保留5
    删除5的倍数
    不断重复。
    最后剩余的数字就是素数。
    Java实现
    public class SievePrime {

    public static void main(String[] args) {

    int n = 100;

    boolean[] isPrime = new boolean[n + 1];

    for(int i = 2; i <= n; i++) {
    isPrime[i] = true;
    }

    for(int i = 2; i * i <= n; i++) {

    if(isPrime[i]) {

    for(int j = i * i; j <= n; j += i) {
    isPrime[j] = false;
    }
    }
    }

    for(int i = 2; i <= n; i++) {
    if(isPrime[i]) {
    System.out.print(i + " ");
    }
    }
    }
    }
    七、学习总结
    素数是数学和计算机科学中的重要概念。通过学习素数的定义、判断方法以及埃拉托斯特尼筛法,我掌握了如何利用Java程序判断一个数是否为素数,以及如何高效地求解一定范围内的所有素数。
    在编程实践中,普通试除法适用于小规模数据,而筛法适用于大规模素数求解。通过本次学习,我进一步提高了Java循环结构、条件判断以及算法优化方面的能力,也加深了对数论基础知识的理解。

http://www.jsqmd.com/news/1036651/

相关文章:

  • 2026全铝大门选购指南:避开这3个坑
  • 合肥中科信息工程学校机电一体化技术(AI智能机器人方向)专业怎么样?好不好? - 小途xt
  • G11Z工业胶粘剂产品特性与正规代理筛选指南 - 资讯速览
  • 性能测试报告撰写指南:从数据到决策的实战方法
  • 2026 长沙手表回收最新行情,逸程更新热门品牌实时回收报价 - 逸程
  • 2026北京房山长阳老房翻新指南:五家本土老牌装企优选榜单横评 - 品牌2026
  • 深入解析DMA控制器:从原理到SCF5250实战配置与调试
  • DeepSeek-V4国产大模型架构解析:DSA稀疏注意力与昇腾AI协同优化
  • 双认证公证怎么办理?避坑指南收好! - 慧办好
  • 合肥本地中职中专升本率最突出的五大名校2026秋季招生名单一览 - 小途xt
  • 2026年天津购车与汽车维保完全指南:如何避坑选择靠谱的标致雪铁龙服务商 - 年度推荐企业名录
  • DeepSeek V4原生多模态与百万上下文技术解析
  • 深入解析MPC8572DS PIXIS FPGA:系统控制核心与硬件启动全流程
  • 雅思哥外教口语课真实体验:提分快吗?适合你吗? - 品牌2026
  • 子智能体进阶异步
  • 如何3步快速掌握Autovisor:智慧树自动刷课工具完整使用指南
  • 油痘肌泥膜推荐 平价好用清洁泥膜,去除黑头优先选这款 - 全网最美
  • 大模型微调实战指南:从原理到生产落地的完整路径
  • 昆明手表回收,首选这家连锁大品牌 - 奢品小当家
  • 雅思哥机考软件荣获华为2026“鸿蒙办公创新合作奖”:真实模考体验全面解析 - 品牌2026
  • 2026合肥本土GEO/SEO优化实测解析:本土全链路AI搜索服务商深度测评 - 行业深度观察C
  • GEO优化如何让电商品牌成为AI推荐的选择? - 资讯报道
  • ERPNext开源ERP终极指南:从零开始的完整企业管理系统
  • 5家高口碑手表回收品牌横向对比,合扬零变相杂费断层行业第一 - 开心测评
  • 2026广州 GEO 优化公司深度测评 TOP5:本土实战派综合全栈实力盘点 - 速递信息
  • 工业园水电费对账:从人工核算到系统自动核对的转变
  • 企业官网怎么做才有询盘 - 凡科杰建云
  • 2026 沈阳茅台回收哪家价格给的高?行情溢价商家排名对比 - 资讯报道
  • GLM-5本地部署实战:三分钟跑通Kimi风格中文大模型
  • Google Colab工程化实践:构建可复现、抗中断、易协作的AI开发环境