蓝桥杯备赛第一篇(数论)

news2025/2/25 15:11:09

数论

1.判断质数

注意i 的终止条件本来是 i < = s q r t ( n u m ) i<=sqrt(num)i<=sqrt(num),但是计算开方太慢了,所以用 i ∗ i < = n u m ,但是i ∗ i 容易爆int,所以最终改成 i < = n u m / i ,后面的其他

代码也会采用这种写法,希望不会搞晕。

 public static boolean is_prime(int num) {
        for (int i = 2; i <= num / i; i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }

 2.最大公约数

public static int gcd(int a, int b) {
        if (b == 0) return a;
        return gcd(b, a % b);
    }

3.最小公倍数

	public static int lcm(int a, int b){
        return a/gcd(a,b)*b;
    }
    public static int gcd(int a, int b) {
        while (b != 0) {
            int r = a % b;
            a = b;
            b = r;
        }
        return a;
    }

4.质数筛

下面的两种方法可以得到 小于等于n 的所有质数。

要想一次性得到很多质数,那么就要使用质数筛法,质数筛法有很多方法,现在给出一种 埃及筛法。这种方法写起来比较简单,而且比较快,强烈推荐这种写法。时间复杂度是:O(nloglogn)

public static void getPrimes(int n) {
        boolean[] is_prime = new boolean[n + 1];
        Arrays.fill(is_prime, true);
        for (int i = 2; i <= n / i; i++) {
            if (is_prime[i]) {
                for (int j = i * i; j <= n; j += i) {
                    is_prime[j] = false;
                }
            }
        }
        for (int i = 2; i <= n ; i++) {
            if (is_prime[i]){
                System.out.println(i);
            }
        }
    }

 

还有一种筛法,是 欧拉筛法,这种方法也比较快,时间复杂度是O(n)。但是,对于我来说,我比较喜欢上面的埃及筛法,因为写起来比较简单而且计算也比较快,大家也可以根据自己的喜好自己选择。

public static void getPrimes(int n) {
        boolean[] is_prime = new boolean[n + 1];
        ArrayList<Integer> primes = new ArrayList<>();
        Arrays.fill(is_prime, true);
        for (int i = 2; i <= n; i++) {
            if (is_prime[i]) {
                primes.add(i);
            }
            for (int j = 0; i * primes.get(j) <= n; j++) {
                is_prime[i * primes.get(j)] = false;
                if (i % primes.get(j) == 0) break;
            }
        }
        for (int i = 2; i < is_prime.length; i++) {
            if (is_prime[i]) {
                System.out.println(i);
            }
        }
    }

 5.区间质数筛

该方法可以得到区间[a,b]的所有质数。步骤如下:
1.求出小于 sqrt b 的所有质数。
2.根据上一步结果筛出区间 [a,b]的所有质数。

 

	// 这是求出小于n的质数
	public static ArrayList<Integer> prime(int n) {
        boolean[] is_prime = new boolean[n + 1];
        ArrayList<Integer> prime = new ArrayList<>();
        Arrays.fill(is_prime, true);
        for (int i = 2; i <= n / i; i++) {
            if (is_prime[i]) {
                for (int j = i * i; j <= n; j += i) {
                    is_prime[j] = false;
                }
            }
        }
        for (int i = 2; i <= n; i++) {
            if (is_prime[i]) {
                prime.add(i);
            }
        }
        return prime;
    }
	//这是求区间[a,b]的质数
    public static void prime(int a, int b) {
        //1.首先求出小于sqrt(b)的所有质数 
        int n = (int) Math.sqrt(b) + 1;
        ArrayList<Integer> prime = prime(n);
        boolean[] is_prime = new boolean[b - a + 1];
        Arrays.fill(is_prime, true);
        for (int p : prime) {
            for (int j = (int) Math.ceil((double) a / p) * p; j <= b; j += p) {
                if (j != p) {
                    is_prime[j - a] = false;
                }
            }
        }
        int count = 0;
        for (boolean value : is_prime) {
            if (value) count++;
        }
        System.out.println(count);
    }

 6.欧拉函数

	public static int f(int n) {
        int res = n;
        for (int i = 2; i <= n / i; i++) {
            if (n % i == 0) {
                res -= res / i;
                while (n % i == 0) {
                    n /= i;
                }
            }
        }
        if (n > 1) {
            res -= res / n;
        }
        return res;
    }

7.区间欧拉函数

 

	public static int[] oula(int n) {
        int[] res = new int[n + 1];
        for (int i = 0; i < res.length; i++) {
            res[i] = i;
        }
        for (int i = 2; i <= n; i++) {
            if (res[i] == i) {
                for (int j = i; j <= n; j += i) {
                    res[j] -= res[j] / i;
                }
            }
        }
        return Arrays.copyOfRange(res, 1, n + 1);
    }

 8.计算所有约数个数

	public static int count(int n) {
        int result = 1;
        for (int i = 2; i <= n / i; i++) {
            if (n % i == 0) {
                int count = 0;
                while (n % i == 0) {
                    count++;
                    n /= i;
                }
                result *= count + 1;
            }
        }
        //说明此时n为质数,乘以2表示1和本身
        if (n > 1) {
            result *= 2;
        }
        return result;
    }

9.计算所有约束和

 

	public static long getSum(int n) {
        long result = 0L;
        for (int i = 1; i <= n / i; i++) {
            if (n % i == 0) {
                result += i;
                if (i * i != n) {
                    result += n / i;
                }
            }
        }
        return result;
    }

10.计算质因子个数

 

	public static void count(int n) {
        int count = 0;
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                count++;
                while (n % i == 0) {
                    n /= i;
                }
            }
        }
        if (n > 1) {
            count++;
        }
        System.out.println(count);
    }

11.扩展欧几里得

 

	public static int[] ex_gcd(int a, int b) {
        if (b == 0) {
            return new int[]{a, 1, 0};
        } else {
            int[] result = ex_gcd(b, a % b);
            return new int[]{result[0], result[2], result[1] - (a / b) * result[2]};
        }
    }

12.快速幂

 

	public static int quickPower(int a, int b) {
        if (b == 1) return a;
        int half = quickPower(a, b / 2);
        if (b % 2 == 0) {
            return half * half;
        } else {
            return half * half * a;
        }
    }

13.快速幂取模

	public static int quickPowerMod(int a, int b, int c) {
        if (b == 1) return a;
        int half = quickPowerMod(a, b / 2, c) % c;
        if (b % 2 == 0) {
            return half * half;
        } else {
            return half * half * a;
        }
    }

 14.欧拉定理

15.求a关于b的逆元

	public static int quickPowerMod(int a, int b, int c) {
        if (b == 1) return a;
        int half = quickPowerMod(a, b / 2, c) % c;
        if (b % 2 == 0) {
            return half * half;
        } else {
            return half * half * a;
        }
    }
    public static int f(int a, int b) {
        return quickPowerMod(a, b-2, b);
    }

 

	public static int[] ex_gcd(int a, int b) {
        if (b == 0) {
            return new int[]{a, 1, 0};
        } else {
            int[] result = ex_gcd(b, a % b);
            return new int[]{result[0], result[2], result[1] - (a / b) * result[2]};
        }
    }

    public static int f(int a, int b) {
        int[] result = ex_gcd(a, b);
        if (result[1] < 0) {
            return b + result[1];
        } else {
            return result[1];
        }
    }

 16.中国剩余定理

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

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

相关文章

5000字深度好文!WMS仓库管理系统的应用场景有哪些?

WMS仓库管理系统提供了全面的仓库管理功能&#xff0c;从物料管理到日常库存调整&#xff0c;从仓库拣选到成品出库。那么仓库管理系统都有哪些功能呢&#xff1f;仓库管理系统的应用场景有哪些呢&#xff1f;企业又该如何使用仓库管理系统呢&#xff1f; 这篇就结合图示零代码…

「优选算法刷题」:矩阵区域和

一、题目 给你一个 m x n 的矩阵 mat 和一个整数 k &#xff0c;请你返回一个矩阵 answer &#xff0c;其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和&#xff1a; i - k < r < i k, j - k < c < j k 且(r, c) 在矩阵内。 示例 1&#xff1…

大数据构建知识图谱:从技术到实战的完整指南

文章目录 大数据构建知识图谱&#xff1a;从技术到实战的完整指南一、概述二、知识图谱的基础理论定义与分类核心组成历史与发展 三、知识获取与预处理数据源选择数据清洗实体识别 四、知识表示方法知识表示模型RDFOWL属性图模型 本体构建关系提取与表示 五、知识图谱构建技术图…

unity shaderGraph实例-物体线框显示

文章目录 本项目基于URP实现一&#xff0c;读取UV网格&#xff0c;由自定义shader实现效果优缺点效果展示模型准备整体结构各区域内容区域1区域2区域3区域4shader属性颜色属性材质属性后处理 实现二&#xff0c;直接使用纹理&#xff0c;使用默认shader实现优缺点贴图准备材质准…

开源大数据集群部署(十二)Ranger 集成 hive

作者&#xff1a;櫰木 1、解压安装 在hd1.dtstack.com主机上执行&#xff08;一般选择hiveserver2节点&#xff09; 解压ranger-2.3.0-hive-plugin.tar.gz [roothd1.dtstack.com software]#tar -zxvf ranger-2.3.0-hive-plugin.tar.gz修改install.properties配置 [roothd1…

Python算法题集_子集

Python算法题集_子集 题78&#xff1a;子集1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【递归】2) 改进版一【双层下标循环】3) 改进版二【双层枚举循环】4) 改进版三【双层下标循环位运算】5) 改进版四【单行双层循环位运算】6) 改进版五【…

C#区域医院云LIS信息管理系统源码 标本管理、两癌筛查、数据分析、试剂管理

目录 ​编辑 区域医院云LIS系统功能亮点&#xff1a; 云LIS系统功能&#xff1a; 一、 基础管理 二、 前处理&#xff08;实验室&#xff09; 三、 标本处理 四、 样本检验 五、 统计报表 六、 质控管理 七、 基本工作流程 区域LIS系统特点&#xff1…

mapbox高德地图与相机

高德地图与相机 演示效果引入 CDN 链接地图显示 创建地图实例定义地图数据源配置地图图层 设置地图样式实现代码 1. 演示效果 本案例使用Mapbox GL JavaScript库创建高德地图。 2. 引入 CDN 链接 <script src"https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapbox-gl.j…

华为算法题 go语言或者python

1 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返…

端侧显著性检测新高度,OPPO提出面向真实场景的PSUNet

https://arxiv.org/abs/2312.07100 在高分辨率场景下&#xff0c;现有的显著目标检测方法难以同时满足快速推理和准确结果的要求。它们受到用于高分辨率图像的公共数据集和高效网络模块的质量的限制。 为了缓解这些问题&#xff0c;我们构建一个显著对象匹配数据集HRSON和一个…

Windows已经安装了QT 6.3.0,如何再安装一个QT 5.12

要在Windows上安装Qt 5.12&#xff0c;您可以按照以下步骤操作&#xff1a; 下载Qt 5.12&#xff1a;访问Qt官方网站或其他可信赖的来源&#xff0c;下载Qt 5.12的安装包。 下载安装地址 下载安装详细教程 安装问题点 qt安装时“Error during installation process(qt.tools…

蒋勤勤48岁亮相,新穿法惊艳全场:上商务下夜店。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 蒋勤勤与陈建斌的恩爱典范&#xff0c;娱乐圈中的爱情佳话。虽…

2024年首个iOS AI病毒来了!偷人脸照片,转银行卡余额...

目录 这个病毒如何感染用户手机&#xff1f; 这个AI病毒有哪些危害特征&#xff1f; 2023年有个类似的病毒出现 银行和个人怎么防御AI病毒&#xff1f; 针对金融机构 针对个人用户 2024年2月15日&#xff0c;国外安全公司Group-IB宣布&#xff0c;发现一个名为“GoldPickaxe”的…

初谈软件工程(一)

我就读于兰州交通大学的软件工程专业。虽然在全国众多的985、211高校中&#xff0c;兰州交通大学可能并不显眼&#xff0c;似乎未能跻身这些所谓的“顶尖”行列就意味着不被认可。然而&#xff0c;在甘肃省的教育领域中&#xff0c;它无疑是一座璀璨的明珠&#xff0c;名列前茅…

Airflow【实践 01】Airflow官网+自测源代码举例(简化安装+官方及自测python代码)

Airflow官网自测源代码举例 1.准备1.1 安装1.2 查询DAG目录 2.官方3.自测4.总结 官方网站地址&#xff1a; https://airflow.apache.org/docs/apache-airflow/2.7.2/&#xff0c;本文是基于 2.7.2版本进行的说明。 1.准备 1.1 安装 上一篇的 Quick Start 有详细的安装过程&…

经营分析到底要做什么?

​做经营分析&#xff0c;不是只看数据这么简单&#xff0c;我们要从目标-分析-决策-预警&#xff0c;全流程实现。 基于数据中台底座&#xff0c;实现从制定战略目标到执行落地的数据应用闭环。主要从四个维度来做&#xff1a; 第一步&#xff0c;就是基于预算管理进行战略目…

【书籍分享 • 第三期】虚拟化与容器技术

文章目录 一、本书内容二、读者对象三、编辑推荐四、前言4.1 云计算技术的发展4.2 KVM、Docker4.3 本书内容简介4.4 作者简介 五、粉丝福利 一、本书内容 《虚拟化与容器技术》通过深入浅出的方式介绍KVM虚拟化技术与Docker容器技术的概念、原理及实现方法&#xff0c;内容包括…

图片录入设备、方式与质量对图片转Excel的影响

随着数字化时代的到来&#xff0c;图片已经成为人们日常生活中不可或缺的一部分。在各行各业中&#xff0c;图片的应用越发广泛&#xff0c;从而促使了图片处理技术的快速发展。然而&#xff0c;图片的质量对于后续数据处理和分析的准确性和可靠性有着至关重要的影响。本文将从…

Java设计模式 | 七大原则之依赖倒转原则

依赖倒转原则&#xff08;Dependence Inversion Principle&#xff09; 基本介绍 高层模块不应该依赖低层模块&#xff0c;二者都应该依赖其抽象&#xff08;接口/抽象类&#xff09;抽象不应该依赖细节&#xff0c;细节应该依赖抽象依赖倒转&#xff08;倒置&#xff09;的…

源聚达科技:新手做抖音店铺到底要多久回本

在数字化浪潮中&#xff0c;抖音店铺如雨后春笋般涌现。新手商家涉足其中&#xff0c;常怀揣一问&#xff1a;何时能够回本?此问题非一日可答&#xff0c;涉及因素众多&#xff0c;但透过分析与经验&#xff0c;仍可略窥端倪。 选品策略。若产品契合市场需求&#xff0c;且具备…