线性筛法与欧拉函数

news2024/10/6 2:24:33

文章目录

    • 筛法求质数
    • 欧拉函数
      • 基本模板
      • 筛法求欧拉函数


每次从最小质数开始遍历,可以保证n只会被最小质数筛到, 避免多次筛到, 每个数只会被筛一次, 即时间复杂度为 O ( n ) O(n) O(n), 线性筛法

筛法求质数

原题链接:筛质数

在这里插入图片描述

每次从最小质数开始遍历,可以保证n只会被最小质数筛到, 避免多次筛到, 每个数只会被筛一次, 即时间复杂度为 O ( n ) O(n) O(n), 线性筛法

#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int primes[N];
bool st[N];
int n;
int get_primes(int n) {
    if(n < 2)   return 0;
    int cnt = 0;
    for(int i = 2; i <= n; i++ ) {	//一次线性筛选,即可完成操作
        if(!st[i]) primes[cnt++] = i;	//没被筛到,则为质数
        for(int j = 0; primes[j] * i <= n; j++) {
            st[primes[j] * i] = true;	//从最小质数集开始筛选相关合数
            if(i % primes[j] == 0)  break;	//找到最小质因数,直接操作结束
        }
    }
    return cnt;
}
int main() {
    cin >> n;
    cout << get_primes(n);
    return 0;
}

欧拉函数

基本模板

原题链接:欧拉函数

在这里插入图片描述


在这里插入图片描述

#include <iostream>
#include <unordered_map>
using namespace std;
int euler(int x) {
    int res = x;
    for(int i = 2; i <= x / i; i++) {
        if(x % i == 0) {
            res = res / i * (i - 1);
            while(x % i == 0)    x /= i;
        }
    }
    if(x > 1)   res = res / x * (x - 1);
    return res;
}

int main() {
    int n;
    cin >> n;
    while(n --) {
        int a;
        cin >> a;
        cout << euler(a) << endl;
    }
    return 0;
}

筛法求欧拉函数

原题链接

在这里插入图片描述
欧拉推导式可根据容斥原理推出

代码如下:

//欧拉:1 ~ n - 1 中与n互质的数的个数
#include <iostream>
#include <bitset>
using namespace std;
const int N = 1e6 + 10;
int primes[N], cnt;
int phi[N];
bitset<N> st;
long long get_eulers(int n) {
    long long res = 0;
    phi[1] = 1;
    for(int i = 2; i <= n; i++) {   //线性筛法,遍历一次n
        if(!st[i]) {    //没有被筛,质数
            primes[cnt++] = i;
            phi[i] = i - 1; //若为质数,则代表1 ~ i - 1都为互质
        }
        for(int j = 0; primes[j] <= n / i; j++) {
            st[primes[j] * i] = 1;
            if(i % primes[j] == 0)  {
                //若primes[j]为i的质因数,则有 primes[j] 的质因子必然存在于i中
                phi[i * primes[j]] = primes[j] * phi[i];
                break;
            }
            //若i % primes[j] != 0,则对质数primes[j]另行计算有:p[j] * (p[j] - 1) / p[j]
            phi[i * primes[j]] = phi[i] * (primes[j] - 1);
        }
    }
    for(int i = 1; i <= n; i++) res += phi[i];
    return res;
}
int main() {
    int n;
    cin >> n;
    cout << get_eulers(n); 
    return 0;
}

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

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

相关文章

3、windows环境下vscode开发c/c++环境配置(二)

前言&#xff1a;上一篇文章写了windows环境下&#xff0c;配置vscode的c/c开发环境&#xff0c;这一篇讲vscode开发c/c的配置文件&#xff0c;包括c_cpp_propertues.json&#xff0c;task.json及launch.json。 一、总体流程 通过c/c插件我们就可以来编写c/c程序了&#xff0c…

77、Spring、Spring Boot和Spring Cloud的关系

77、Spring、Spring Boot和Spring Cloud的关系 随着 Spring、Spring Boot 和 Spring Cloud 的不断发展&#xff0c;越来越多的开发者加入 Spring 的大军中。对于初学者而言&#xff0c;可能不太了解 Spring、Spring Boot 和 Spring Cloud 这些概念以及它们之间的关系&#xff…

强化学习入门(Matlab2021b)-创建环境【2】

目录 1 前言2 利用step和reset函数创建自定义环境2.1 对象描述2.2 reset函数2.3 step函数2.3 构建自定义环境3 使用匿名函数传递额外的参数4 可视化检查自定义函数的输出参考链接1 前言 本文介绍如何基于MATLAB编写step、reset函数,创建自己的强化学习环境(Environment)。 使…

ThreadLocal(5):ThreadLocalMap源码分析

在分析ThreadLocal方法的时候&#xff0c;我们了解到ThreadLocal的操作实际上是围绕ThreadLocalMap展开的。ThreadLocalMap的源码相对比较复杂, 我们从以下三个方面进行讨论。 1 基本结构 ​ ThreadLocalMap是ThreadLocal的内部类&#xff0c;没有实现Map接口&#xff0c;用独…

Vue2路由组件练习

Vue2路由组件练习 1. 演示效果 2. 代码分析 2.1. 安装 vue-router 命令&#xff1a;npm i vue-router 应用插件&#xff1a;Vue.use(VueRouter) 2.2. 创建路由文件 在 src 文件夹下&#xff0c;创建router文件夹&#xff0c;并在该文件夹创建index.js文件 2.3. 导入依赖…

SpringBootWeb学习笔记——12万字详细总结!

0. 写在前面 注:这套笔记是根据黑马程序员B站2023-3-21的视频学习的成果,其中省略了前端基础部分、Maven部分和数据库基础部分,详情可见目录。 注注:目前文章内结尾处多幅图片加载不出来,因为图片还存在本地没被传上来,过段时间再改~ 所有的Spring项目都基于Spring Fra…

linux 修改开发板网卡eth0的ip地址

win10如何新增电脑ip地址&#xff1a; https://blog.csdn.net/linxinfa/article/details/105817473 ifconfig # 可设置网络设备的状态&#xff0c;或是显示目前的设置。 命令详解&#xff1a;https://www.runoob.com/linux/linux-comm-ifconfig.html 一、临时修改 ifconfig e…

「Qt Widget中文示例指南」如何实现文档查看器?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 文档查看器是一个显…

基于springboot+vue的洗衣店订单管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

【水处理】水环境治理综合服务,污水一体化管控平台

水是人类生活中不可或缺的资源之一。然而&#xff0c;随着人口的增长和工业化的进程&#xff0c;水资源的压力日益增大。由于污染和过度开采&#xff0c;全球许多地区面临水资源短缺的问题。因此&#xff0c;水处理成为了一个至关重要的问题&#xff0c;旨在净化和保护重要的水…

【Python笔记-设计模式】适配器模式

一、说明 适配器模式是一种结构型模式&#xff0c;它使接口不兼容的对象能够相互合作 (一) 解决问题 主要解决接口不兼容问题 (二) 使用场景 当系统需要使用现有的类&#xff0c;但类的接口不符合需求时当需要一个统一的输出接口&#xff0c;但输入类型不可预知时当需要创…

Nginx 反向代理配置

Nginx就不废话了&#xff0c;web服务器。 最近在备案一个域名&#xff0c;想要备案&#xff0c;部署一个服务器&#xff0c;平常很少自己配置Nginx&#xff0c;今天记录下。 1、反向代理 正向代理 指 客户端通过代理访问后端服务 反向代理 指 服务器推出一个客户&#xff0…

最优二叉搜索树 C#实现

最优二叉搜索树 C#实现 介绍一下 上一篇博文搞半天挺烧脑&#xff0c;没搞清楚继续… 主要是练习动态规划算法。最关键的一个是这个最优二叉搜索树能干啥。我认为如果数据稳定&#xff0c;统计出概率来&#xff0c;用最优二叉树保存&#xff0c;以后搜索应该是效率比较高的。…

五种多目标优化算法(MOJS、MOGWO、NSWOA、MOPSO、NSGA2)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOJS 1.2MOGWO 1.3NSWOA 1.4MOPSO 1.5NSGA2 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0…

计算机设计大赛 深度学习人脸表情识别算法 - opencv python 机器视觉

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人脸表情识别系…

隐匿的炸弹 — C语言的隐式声明

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘湖南区域日常实习生&#xff0c;任何区域的暑假Linux驱动实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &#xff08;2&#xff0…

comsol燃料电池+锂离子电池

电化学仿真技术通过对电池微观行为进行研究&#xff0c;明晰电池内部多现象机理&#xff0c;并将其数值化&#xff0c;通过数值法实现对物理特征联合计算&#xff0c;建立完整的电池模型。COMSOL Multiphysics 具有强大的多物理场全耦合仿真分析功能、高效的计算性能&#xff0…

WebRTC最新版报错解决:FileNotFoundError: LASTCHANGE.committime (二十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

IP地址定位可以精确到哪里

IP地址定位能够精确到的位置级别取决于多种因素&#xff0c;包括IP地址的分配方式、数据库的质量和更新频率、用户的移动性等。一般而言&#xff0c;IP地址定位可以精确到市级&#xff0c;甚至可以达到街道级别 https://www.ip66.net/?utm-sourceLJ&utm-keyword?1146 但需…

【算法2-1】前缀和、差分与离散化

一、【P3406】海底高铁&#xff08;差分贪心&#xff09;​​​​​​ 由于本题涉及到线路问题&#xff0c;需要统计Uim途径每条线路的次数&#xff0c;而且Uim每次的轨迹都是很长一段路径&#xff0c;所以需要使用一个合理的数据结构来维护区间的变化&#xff0c;首先想到线段…