博客
关于我
【总结】素数与约数
阅读量:178 次
发布时间:2019-02-28

本文共 1452 字,大约阅读时间需要 4 分钟。

埃氏筛与线性筛的对比分析

埃氏筛是一种高效的筛选合数方法,通过素数进行筛选,以区分质数和合数。其核心算法通过不断筛除已知质数的倍数,最终得到所有合数。相比之下,线性筛方法则通过逐个检查每个数是否能被已知质数整除。

埃氏筛概述

埃氏筛的核心逻辑基于以下步骤:

  • 初始化一个布尔数组b,用于标记质数。
  • 遍历从2到n的每个数i:
    • 如果i未被标记为合数,则标记为质数,并记录下来。
    • 对于i的所有倍数j,标记为合数。
  • 这种方法的时间复杂度为O(n log log n),在处理较大范围时表现优异。

    线性筛优势

    线性筛方法通过逐个检查每个数是否能被已知质数整除,时间复杂度为O(n)。其优势在于每个数仅被筛一次,且不需要预先生成所有质数。这种方法与埃氏筛相比,在处理较小范围时更加高效。

    代码解析

    埃氏筛代码

    void work() {    for(int i=2; i<=n; i++) {        if(!b[i]) {            pri[++cnt] = i;            for(int j=1; j<=n/i; j++)                b[i*j] = 1;        }    }}
    • pri数组用于存储已知的质数。
    • b数组用于标记质数和合数。
    • work函数通过遍历每个数i,筛选出质数并标记其倍数。

    欧拉函数计算

    void euler() {    for(int i=2; i<=n; i++) {        if(!phi[i])            phi[i] = i-1;        pri[++cnt] = i;        for(int j=1; j<=cnt; j++) {            if(i % pri[j] == 0)                phi[i * pri[j]] = phi[i] * pri[j];            else                phi[i * pri[j]] = phi[i] * (pri[j] - 1);        }    }}
    • phi数组用于存储欧拉函数值。
    • 欧拉函数用于计算小于等于n的数的互质数目。

    问题A解答

    数对(x, y)的计数

    为了计算满足条件的数对(x, y),我们需要以下步骤:

  • 计算区间[1, n]内的质数个数。
  • 计算欧拉函数值phi(n)。
  • 使用以下公式统计数对:[ans = \sum_{k=2}^{n} \phi(k) \times \sum_{\substack{m=1 \ m \times k \leq n}}^{n} \phi(m) \times 2]
  • 通过这种方法,可以高效地计算出满足条件的数对数量。

    问题B解答

    寻找质数对

    对于给定的区间[l, r],质数对的寻找可以通过以下步骤实现:

  • 使用埃氏筛生成质数列表。
  • 遍历质数列表,找出区间内的质数对。
  • 比较质数对的间隔,确定最小和最大的间隔。
  • 这种方法确保了在较小范围内高效地找到质数对。

    问题C解答

    不定方程求解

    对于方程:[1/x + 1/y = 1/n!]其正整数解的数目可以通过以下方法计算:

  • 计算(n!)^2的约数个数。
  • 根据约数对(x, y)的形式,计算满足条件的解的数量。
  • 这种方法通过数学变形,将问题转化为约数个数的计算,从而高效地解决了问题。

    通过以上方法,我们可以系统地处理相关数学问题,并利用埃氏筛和线性筛的优势,实现高效的算法设计。

    转载地址:http://sawn.baihongyu.com/

    你可能感兴趣的文章
    MySQL 数据类型和属性
    查看>>
    mysql 敲错命令 想取消怎么办?
    查看>>
    Mysql 整形列的字节与存储范围
    查看>>
    mysql 断电数据损坏,无法启动
    查看>>
    MySQL 日期时间类型的选择
    查看>>
    Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
    查看>>
    MySQL 是如何加锁的?
    查看>>
    MySQL 是怎样运行的 - InnoDB数据页结构
    查看>>
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>