算法日记32:埃式筛、gcd和lcm、快速幂、乘法逆元

一、埃式筛(计算质数)

1.1、概念

1.1.1、在传统的计算质数中,我们采用单点判断,即判断(2~sqrt(n))是否存在不合法元素,若存在则判否,否则判是

在这里插入图片描述

1.1.2、假设,此时我们需要求1~1000的所有质数,此方法的时间复杂度就会变成O(n*sqrt(n)),这显然太过冗余了

在这里插入图片描述

  • 因此,我们可以使用埃式筛

1.1.3、现在,求1~20中的所有质数,我们就可以:

  • 1)首先将0、1排除:

  • 2)创建从2到n的连续整数列表,[2,3,4,…,n];

  • 3)初始化 p = 2,因为2是最小的质数;

  • 4)枚举所有p的倍数(2p,3p,4p,…),标记为非质数(合数);

  • 5)找到下一个 没有标记 且 大于p 的数。如果没有,结束运算;如果有,将该值赋予p,重复步骤4;

  • 6)运算结束后,剩下所有未标记的数都是找到的质数。
    在这里插入图片描述

  • 此时,2是第一个质数,因此把2的倍数全部设置为1(vis[j]=1)将其全部筛出
    在这里插入图片描述

  • 接下来,发现3为0,表示3是一个质数,因此我们把3的倍数也给筛掉
    在这里插入图片描述

  • 因此,我们可以发现只要其没有被其他数字筛掉,那么他就一定是质数

1.2、总结:

在这里插入图片描述

ll vis[N];//用来判断一个数是否被筛掉了,0->没被筛掉,1->筛掉
void solve()
{ll n;cin>>n;vis[0]=vis[1]=1;for(ll i=2;i<=n;i++)//从2开始筛值{//从i*2开始,每次+i,当枚举到还没筛掉的数,筛掉for(ll j=i*i;j<=n;j+=i) {if(vis[i]==0) vis[j]=1;}}for(ll i=2;i<=n;i++) if(vis[i]==0) cout<<i<<' '; 
}

2、最大公约数(gcd)和最小公倍数(lcm)

2.1、gcd求法

2.1.1、如何求解两个数(a,b)的最大公约数(gcd)?

  • 使用辗转相除法
    • 首先 ,我们假设(a>b),通过数学公式不难得出:
    • 1)gcd(a,b)=gcd(a%b,b),比如gcd(18,6)=gcd(0,6)
    • 2)if(b==0)那么意味着此时的a即为最小公倍数
  • 因此,代码可以写成
ll gcd(ll a,ll b)	//只需记住,无论何时:a>b
{return b==0 ? a : gcd(b,a%b);
}

在这里插入图片描述

2.2、lcm求法

2.2.1、如何求解两个数(a,b)的最小公倍数(lcm)?

  • 只需记住一个公式即可:
a*b=gcd(a,b)*lcm(a*b);

3、快速幂

3.1、概念:求解ab

  • 1、当b为奇数时候,拆出一个a,此时,b就变成了一个偶数
  • 2、当b为一个偶数的时候,就拆出其次方项 b-->2/b
    在这里插入图片描述

3.1.1、代码实现

//快速幂
ll qmi(ll a,ll b,ll c)  //a ^ b % c
{int res=1;while(b){if(b&1) res=res*a%c,b--;//当b是奇数时,拆出一个a,使得 b 变成偶数else a=a*a%c,b>>=1;	//此时b为偶数,拆出一个a*a,等待下次为奇数再计算答案}return res;
}

四、乘法逆元

4.1、概念

  • 在写题目的时候,假设我们需要表达a/b,是不好表达的,只能用浮点数来表示,因此我们就采用乘法逆元(类似于倒数 % p)来表示
    在这里插入图片描述

4.2、那么,如何来求逆元呢?

  • 我们可以使用费马小定理来求解
    在这里插入图片描述

4.3、乘法逆元例题

  • 题目链接

在这里插入图片描述

4.3.1、对于例题,我们可以对这个分式进行分解

在这里插入图片描述

  • 因此,我们可以使用逆元来表示分数即可
#include<bits/stdc++.h>
using namespace std;typedef long long ll;
const int N = 2e5 + 7;
ll p=998244353;ll qmi(ll a,ll b)	//快速幂
{ll res=1;while(b){if(b&1) res=res*a%p,b--;a=a*a%p,b>>=1;}return res%p;
}ll inv(int x)	//求解x的逆元
{return qmi(x,p-2)%p;
}void solve()
{ll a,b,c,q;cin>>a>>b>>c>>q;while(q--){ll x;cin>>x;cout<<(a*x%p+b)%p*inv(c*x%p)%p<<'\n'; }
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int _ = 1; cin>>_;while (_--) solve();return 0;
}

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

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

相关文章

使用 mysqldump 获取 MySQL 表的完整创建 DDL

要获取 MySQL 中某个表的完整创建 DDL&#xff08;仅结构&#xff0c;不含数据&#xff09;&#xff0c;可以使用 mysqldump 工具的以下命令&#xff1a; 基本命令格式 bash mysqldump -h [主机名] -u [用户名] -p --no-data --single-transaction --routines --triggers --…

Debian 系统 Python 开发全解析:从环境搭建到项目实战

Debian 系统 Python 开发全解析:从环境搭建到项目实战 在当今数字化时代,Python 凭借其简洁易读的语法和强大的功能,成为了最受欢迎的编程语言之一。Debian 作为一款稳定、安全且开源的 Linux 操作系统,为 Python 开发提供了理想的环境。本文将详细介绍在 Debian 系统上进…

实时技术对比:SSE vs WebSocket vs Long Polling

早期网站仅展示静态内容&#xff0c;而如今我们更期望&#xff1a;实时更新、即时聊天、通知推送和动态仪表盘。 那么要如何实现实时的用户体验呢&#xff1f;三大经典技术各显神通&#xff1a; • SSE&#xff08;Server-Sent Events&#xff09;&#xff1a;轻量级单向数据…

【前端】es6新特性全解

第一章 简介 1.1 ES6概述 1.1.1 ES6定义与发展历程 1. ES6 定义 ES6 全称 ECMAScript 6.0&#xff0c;它是 JavaScript 语言的下一代标准&#xff0c;对 JavaScript 语言进行了许多增强和扩展&#xff0c;带来了更简洁、更强大的语法特性。可以把 ES6 想象成是 JavaScript …

nlp中的频率就是权重吗

&#x1f522; 一、“频率”是什么&#xff1f; 在 NLP 中&#xff0c;**词频&#xff08;frequency&#xff09;**通常指的是&#xff1a; 某个单词或 token 在语料库中出现的次数&#xff08;或比例&#xff09; 举例&#xff1a; "The cat sat on the mat. The cat i…

多模态大语言模型arxiv论文略读(九十八)

Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ➡️ 论文标题&#xff1a;Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ➡️ 论文作者&#xff1a;Ziyuan Huang, Kaixiang Ji, Biao Gong, Zhiwu Qing, Qinglong Zhang, Kecheng Zhe…

WEB安全--RCE--webshell HIDS bypass4

继WEB安全--RCE--webshell HIDS bypass3的补充&#xff1a; 十三、时间开关 webshell&#xff1a; <?php ini_set("display_errors",1); function foo($test, $bar FSYSTEM) {echo $test . $bar; } $function new ReflectionFunction(foo); $q new ParseEr…

.NET 7 AOT 使用及 .NET 与 Go 语言互操作详解

.NET 7 AOT 使用及 .NET 与 Go 语言互操作详解 目录 .NET 7 AOT 使用及 .NET 与 Go 语言互操作详解 一、背景与技术概述 1.1 AOT 编译技术简介 1.2 Go 语言与 .NET 的互补性 二、.NET 7 AOT 编译实践 2.1 环境准备 2.2 创建 AOT 项目 2.3 AOT 编译流程 2.4 调试信息处…

机器人--里程计

教程 轮式里程计视频讲解 里程计分类 ros--odometry 什么是里程计 里程计是一种利用从移动传感器获得的数据来估计物体位置随时间的变化而改变的方法。该方法被用在许多机器人系统来估计机器人相对于初始位置移动的距离。 注意&#xff1a;里程计是一套算法&#xff0c;不…

云原生时代 Kafka 深度实践:02快速上手与环境搭建

2.1 本地开发环境搭建 单机模式安装 下载与解压&#xff1a;前往Apache Kafka 官网&#xff0c;下载最新稳定版本的 Kafka 二进制包&#xff08;如kafka_2.13-3.6.0.tgz&#xff0c;其中2.13为 Scala 版本&#xff09;。解压到本地目录&#xff0c;例如/opt/kafka&#xff1a…

Vue Hook Store 设计模式最佳实践指南

Vue Hook Store 设计模式最佳实践指南 一、引言 在 Vue 3 组合式 API 与 TypeScript 普及的背景下&#xff0c;Hook Store 设计模式应运而生&#xff0c;它结合了 Vue 组合式 API 的灵活性与状态管理的最佳实践&#xff0c;为开发者提供了一种轻量级、可测试且易于维护的状态…

无人机多人协同控制技术解析

一、运行方式 无人机多人点对点控制通常采用以下两种模式&#xff1a; 1. 主从控制模式 指定一个主控用户拥有最高优先级&#xff0c;负责飞行路径规划、紧急操作等关键指令&#xff1b;其他用户作为观察者&#xff0c;仅能查看实时画面或提交辅助指令&#xff0c;需经主…

树型表查询方法 —— SQL递归

目录 引言&#xff1a; 自链接查询&#xff1a; 递归查询&#xff1a; 编写service接口实现&#xff1a; 引言&#xff1a; 看下图&#xff0c;这是 course_category 课程分类表的结构&#xff1a; 这张表是一个树型结构&#xff0c;通过父结点id将各元素组成一个树。 我…

微服务难题?Nacos服务发现来救场

文章目录 前言1.什么是服务发现2.Nacos 闪亮登场2.1 服务注册2.2 服务发现 3.Nacos 的优势3.1 简单易用3.2 高可用3.3 动态配置 4.实战演练4.1安装 Nacos4.2 服务注册与发现示例代码&#xff08;以 Spring Boot 为例&#xff09; 总结 前言 大家好&#xff0c;我是沛哥儿。今天…

AStar低代码平台-脚本调用C#方法

修改报工表表单&#xff0c;右键定义弹出菜单&#xff0c;新增一个菜单项&#xff0c;并在点击事件脚本中编写调用脚本。 编译脚本&#xff0c;然后在模块代码里面定义这个方法&#xff1a; public async Task<int> on_call_import(DataRow curRow) {PrintDataRow(cur…

python调用langchain实现RAG

一、安装langchain 安装依赖 python -m venv env.\env\Scripts\activatepip3 install langchainpip3 install langchain-corepip3 install langchain-openaipip3 install langchain-communitypip3 install dashscopepip3 install langchain_postgrespip3 install "psyc…

大学大模型教学:基于NC数据的全球气象可视化解决方案

引言 气象数据通常以NetCDF(Network Common Data Form)格式存储,这是一种广泛应用于科学数据存储的二进制文件格式。在大学气象学及相关专业的教学中,掌握如何读取、处理和可视化NC数据是一项重要技能。本文将详细介绍基于Python的NC数据处理与可视化解决方案,包含完整的代…

ORB-SLAM2学习笔记:ComputeKeyPointsOctTree分析过程记录

ComputeKeyPointsOctTree是ORB特征提取器中计算关键点的部分&#xff0c;特别是使用八叉树&#xff08;OctTree&#xff09;方法进行关键点分布。 首先&#xff0c;函数参数是vector<vector的引用allKeypoints&#xff0c;用来存储各层的关键点。代码开头调整了allKeypoint…

LeetCode Hot100(多维动态规划)

62. 不同路径 比较板子的dp&#xff0c;实际上就是到达一个点有两种方式&#xff0c;从上面来或者是左边&#xff0c;加起来就可以了 class Solution {public int uniquePaths(int m, int n) {int [][]arr new int[m2][n2];arr[1][1]1;for(int i1;i<m;i){for(int j1;j<…

Oracle MOVE ONLINE 实现原理

Oracle MOVE ONLINE 实现原理 Oracle 的 MOVE ONLINE 操作是一种在线重组表的技术&#xff0c;允许在不中断业务的情况下重新组织表数据。以下是其实现原理的详细分析&#xff1a; 基本概念 MOVE ONLINE 是 Oracle 12c 引入的特性&#xff0c;用于替代传统的 ALTER TABLE ..…