【数轮】数论、质数、最大公约数、菲蜀定理

news2024/10/5 12:25:01

数学

唯一分解定理

n>=2都可以表示为质因数的乘方。
令 n = a1b1a2b2 … \dots
a1,b1 … \dots 都是质因数,b1,b2 … \dots 是对应质因数的数量。

调和级数

1+1/2 + 1/3 +1/4 ⋯ \cdots 1/ n 约等于 logn。
证明过程:
1/3 + 1/4 < (1/2) × \times × 2 = 1
1/5 + 1/6 + 1/7 + 1/8 < (1/4) × \times × 4 = 1
1/9+1/10+…1/16 < (1/8) × \times × 8 = 1
⋮ \vdots
1/2^(m-1)+ ⋯ \cdots + 1/2m < 1

区间公约数

n个数,那些数对非互质。两两枚举,时间复杂度是O(nn)。
令这些数最大值为m,枚举那些数是x$\in[2,m]的倍数,则时间复杂度是O(nlogn)。
一,相同值如果大于1,非互质。
二,如果同时x>1的倍数,非互质。
转化成并集查找计算连通区域,注意:两个连通区域合并,只需要从2个联通区域任取一点相连。

质数

质数分解

x的质因数中最多有一个大于 x \sqrt x x 。反证法:如果有两个质因数大于 x \sqrt x x ,则它们相乘大于 x × x \sqrt x \times \sqrt x x ×x ,和所有质因数相乘等于x矛盾。
小于等于x的质因数可以直接枚举。如何寻找大于 x \sqrt x x 的质因数?
x 如果包括小于等于 x \sqrt x x 的质因数x1,则x ÷ \div ÷=x1。直到不包括小于等于 x \sqrt x x 的质因数。如果此时x>1,则此时的x也是质因数。

for (int i = 0; i < nums.size(); i++) {
			int tmp = nums[i];
			for (auto& iPri : vPrime) {
				if (iPri * iPri > tmp) { break; }
				if (0 == tmp % iPri) { indexs[iPri].emplace_back(i); }
				while ((0 == tmp % iPri)) {
					tmp /= iPri;
				}
			}
			if( tmp > 1){ indexs[tmp].emplace_back(i); }
		}

埃氏筛

如何寻找[1,m]所有质数。从2其,如果i是质数,则将i的x倍(x>1)标记位非质数。时间复杂度:O(nlogn),logn是调和级数的和。

vector<int> CreatePrime(int iMax)
{
	vector<int> vNo(iMax + 1);
	vector<int> vPrime;
	for (int i = 2; i <= iMax; i++)
	{		
		if (!vNo[i])
		{
			vPrime.emplace_back(i);
		}
		for (const auto& n : vPrime)
		{
			if( n * i > iMax )
			{
				break;
			}
			vNo[n * i] = true;
		}		
	}
	return vPrime;
}

欧拉筛(线性筛)

埃氏筛枚举了所有a × \times ×b,其中a是质数,b是任意数。
欧拉筛增加了新条件:a <= b的最小质因数,也就a 是 a × \times ×b 的最小质因数。因为任意数的最小质因数都只有一个,故不会重复。故时间复杂度:O(n)
以12为例:
埃氏筛枚举了2次,2 × \times × 6 ,3 × \times × 4。
欧拉筛:只枚举了 2 × \times × 6 。4 枚举完2后,就结束了。
在这里插入图片描述

代码

vector<int> CreatePrime(int iMax)
{
	vector<bool> isPrime(iMax + 1,true);
	vector<int> vPrime;
	for (int i = 2; i <= iMax; i++)
	{
		if (isPrime[i])
		{
			vPrime.emplace_back(i);
		}
		for (const auto& n : vPrime)
		{
			if (n * i > iMax){break;}
			isPrime[n * i] = false;
			if (0 == i % n) { break; }
		}
	}
	return vPrime;
}

最大公约数

gcc,vc都有gcd函数,可以直接使用。

辗转相减法

求a,b的最大公约数。如果a,b相等,则a就是公约数。下面只讨论两者不等。
不失一般性,令a > b,其最大公约数为q。a = a1q,b=b1q ,令a - b =(a1-b1)q =c1q= c。则q也是(c,b)的公约数。
我们用反证法来证明c,b没有大于q的公约数。假定c,b有大于q的公约数q1,则a = (b2+c2)q2 ,b = b2q2。a,b也有公约数q2,和a,b的最大公约数是q矛盾。
不断持续此过程,可以保持公约数不变的情况下,让max(a,b)变小。由于a>b,故c >= q。经过有限回合,c一定变成q,b变成q后,a每次也减少q,直到a也变成q。

辗转相除法(欧几里得)求最大公约数

( a , b ) → 不失一般性,令 a > = b ( c = a m o d    b , d = b ) → 不失一般性,令 c > = d ( e = c m o d    d , f = d ) ⋯ (a,b)^{不失一般性,令a >= b}_\rightarrow (c= a \mod b,d= b) ^{不失一般性,令c >= d}_\rightarrow (e=c \mod d,f=d) \cdots (a,b)不失一般性,令a>=b(c=amodb,d=b)不失一般性,令c>=d(e=cmodd,f=d)
直到最后的两个数一个为0,则公约数是另外一个。比如:e为0,最大公约数就是f。f为0,最大公约数为e。
a,b不断变小,有限次数一定有一个数变为0。
令某两个数的最大公约数为q, 则这两个数可以表示为 q × a , q × b 则 q × ( a m o d    b ) , q × b 的最大公约数为 q 则这两个数可以表示为q \times a,q \times b 则 q \times (a \mod b) , q \times b 的最大公约数为q 则这两个数可以表示为q×a,q×bq×(amodb),q×b的最大公约数为q
a%b 为0,也符合数学定义: 0和任何数x的最大公约数是x。

二进制求公约数

求a,b的最大公约数。
一,如果a,b都是偶数,则GCD(a,b) = 2*GCD(a,b)。
二,如果a 是偶数,b是奇数(反之类似)。GCD(a,b)=GCD(a/2,b)。b是奇数,所以他们的公约数不包括2。
三,两者都是奇数。
3.1,两者相等。a就是最大公约数。
3.2,a b不等,不失一般性,令a>b。GCD(a,b) == GCD(a+b,b) == GCD((a+b)/2,b)
由于a,b是不断变小,一定会相等。

菲蜀定理

【数学归纳法 反证法】菲蜀定理

题解

质数判断、分解
【分解质因数 差分数组】2584. 分割数组使乘积互质
【状态机dp 状态压缩 分组】1994. 好子集的数目
【唯一分解定理 数学】1808好因子的最大数目
【单调栈】LeetCode:2818操作使得分最大
最大公约数
【栈 最小公倍数 最大公约数】2197. 替换数组中的非互质数
【最大公约数 排序】2344. 使数组可以被整除的最少删除次数
【二进制求公约数】【数学】【数论】2543. 判断一个点是否可以到达
【最大公约数】2862. 完全子集的最大元素和
区间最大公约数:调和级数o(nlogn)
【并集查找 最大公约数 调和数】952. 按公因数计算最大组件大小
【数论 最大公约数 调和数】【最大公约数】1819. 序列中不同最大公约数的数目
【最大公约数 调和级数】2183.统计可以被 K 整除的下标对数目
【调和级数 并集查找】1627. 带阈值的图连通性
【最大公约 调和奇数 并集查找】2709. 最大公约数遍历
菲蜀定理
【菲蜀定理 子序列】1250 检查「好数组」
唯一分解定理
【唯一分解定理】【动态规划】【前缀和】1735生成乘积数组的方案数
类似区间公约数
【动态规划】【前缀和】【分组】2338. 统计理想数组的数目

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

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

相关文章

程序员最趁手的SVM算法,学完你会哭着感谢努力的自己!下篇.

支持向量机上篇内容更重要。 上篇地址&#xff1a;程序员最趁手的SVM算法&#xff0c;学完你会哭着感谢努力的自己&#xff01;上篇。-CSDN博客 废话不说直接进入主题&#xff1a; 6核贝叶斯支持向量机 核贝叶斯支持向量机通过学习一些已知的例子&#xff0c;并找到一个特殊…

【0DAY】湖南建研工程质量检测系统Download接口处存在任意文件读取漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

赋能数据库智能托管,Akamai 发布首款云计算业务线产品!

为了尽可能地简化数据库管理的复杂性&#xff0c;降低数据库成本&#xff0c;Akamai 在近期推出了首款 DBaaS&#xff08;数据库即服务&#xff09;产品——Linode Managed Database。这一数据库产品是 Akamai 自3月份收购 Linode 后发布的首款计算业务线产品。 一、更易用的数…

ipa 分区算法分析,图解

参考 Room Segmentation: Survey, Implementation, and Analysis. 分区算法调查&#xff0c;实现以及评估对比 相关论文 分区算法 New Brooms Sweep Clean - An Autonomous Robotic Cleaning Assistant for Professional Office Cleaning 形态分割 Interactive SLAM using …

EPICS database练习

给定一个以下的数据库&#xff1a; # 指定Limit的上限&#xff0c;初始为10&#xff0c;可以通过通道访问进行设置&#xff0c;上限为100 record(ao, "$(P)Limit") { field(DRVH, "100") field(DOL, "10") field(PINI, "YES") }# 一个…

vue3中的computed

一.computed用法 computed 计算属性就是当依赖的属性的值发生变化的时候&#xff0c;才会触发他的更改&#xff1b;如果依赖的值&#xff0c;不发生变化的时候&#xff0c;使用的是缓存中的属性值。 computed 属性是 Vue3 中的一个响应式计算属性&#xff0c;它可以根据其他响应…

谷歌Flank潜藏3年的Github Action供应链攻击

01 简 介 Flank [1] 是谷歌 Firebase Test lab 开源在 Github 的一个项目&#xff0c;用于同时对多个安卓和IOS设备进行测试。2024年4月15号 AWS 安全工程师 Adnan Khan 公布了关于该项目代码仓库 Github Action CI/CD 存在漏洞的细节[2]&#xff0c;漏洞在2020年于此 代码合…

LabVIEW二维码生成与识别

LabVIEW二维码生成与识别 随着数字化时代的快速发展&#xff0c;QR二维码作为一种高效的信息传递和识别手段&#xff0c;已广泛应用于各行各业。利用LabVIEW软件及其NI视觉开发模块(VDM)来实现一个高效的QR二维码生成与识别系统。该系统不仅能够快速生成带有自定义信息的二维码…

未授权访问:VNC未授权访问

目录 1、漏洞原理 2、环境搭建 3、未授权访问 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬总结好的文章&#xff1a; 这里附上大…

C++的数据结构(五):树和存储结构及示例

在计算机科学中&#xff0c;树是一种抽象数据类型&#xff08;ADT&#xff09;或是实现这种抽象数据类型的数据结构&#xff0c;用来模拟具有树状结构性质的数据集合。这种数据结构以一系列连接的节点来形成树形结构。在C中&#xff0c;树的概念和存储结构是实现各种复杂算法和…

如何利用AI提高内容生产效率与AIGC典型案例分析

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

DI-engine强化学习入门(八)如何高效构建决策环境

本文章将介绍 DI-engine 中用于高效构建和标准化不同类型决策环境的系列工具&#xff0c;从而方便我们将各式各样的原始决策问题转化为适合使用强化学习方法解决的形式。 前言 对于“决策环境复杂性”的问题&#xff0c;这里描述的是在强化学习&#xff08;RL&#xff09;领域…

torch 单机 多卡 训练(二)

pytorch.distributed.launch和torchrun的对比 多卡训练 真的烦 并行训练最大的好处&#xff0c;在于GPU内存变大&#xff0c;不是变快 torch.distributed.launch CUDA_VISIBLE_DEVICES0,1,2,3 python -m torch.distributed.launch --nproc_per_node4 --nnodes1 --use_env k…

获取Linux上的Redis的用户名、密码、端口、host等信息

目录 进入redis-cli的目录 启动./redis-cli服务 查询密码 查询用户名 查询端口 查询host 参考文章&#xff1a;解决redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused-阿里云开发者社区 (aliyun.com) linux查看redis用户和密码_mo…

最新版★重大升级★神点云连锁餐饮V2独立版点餐系统★公众号/h5/小程序前后端全套源码

提醒&#xff1a; 市场上流通很多老版本代码&#xff0c;一大堆问题且无法保证售后的源码&#xff0c;请各位买家一定要睁大眼睛&#xff0c;以防上当受骗&#xff01;&#xff01;&#xff01;本系统源码全是经本人亲自测试与修复的完好版本&#xff0c;且本人用此版本源码已…

面试官:说说你对Node.js 的理解?优缺点?应用场景?

一、是什么 Node.js 是一个开源与跨平台的 JavaScript 运行时环境 在浏览器外运行 V8 JavaScript 引擎&#xff08;Google Chrome 的内核&#xff09;&#xff0c;利用事件驱动、非阻塞和异步输入输出模型等技术提高性能 可以理解为 Node.js 就是一个服务器端的、非阻塞式I/…

EDA设计学习笔记2:STM32F103C8T6最小系统板的仿绘

今日开始仿制练习一个STM32F103C8T6最小系统板&#xff0c;通过对这个最小系统板的仿制&#xff0c;达到对自己PCB设计的练习的目的&#xff0c;最终目标是自己设计出一块PCB&#xff0c;做一个OLED的桌面小摆件...... 也不知道画出来能不能用..... 目录 主控芯片的搜索与放置…

定期更新与维护:技术与生活的同步律动

在这个数字化时代&#xff0c;科技的温暖之光照进了盲人朋友们的日常生活中&#xff0c;特别是那些辅助出行的应用程序&#xff0c;它们如同贴心的向导&#xff0c;引领着用户穿越城市的喧嚣与宁静。然而&#xff0c;要确保这些应用始终能够高效、安全地服务于盲人用户&#xf…

Centos 7.9如何使用源码编译安装curl最新版本

文章目录 1、前言2、curl源代码下载3、openssl安装4、编译curl4.1、配置编译环境4.2、编译输出二进制curl程序4.3、安装编译后的curl4.4、编译完成检查4.5、验证安装 1、前言 Centos 7.9&#xff0c;由于系统为2017年发行&#xff0c;且以稳定性为主&#xff0c;部分工具版本较…

每日OJ题_贪心算法四⑥_力扣1262. 可被三整除的最大和

目录 力扣1262. 可被三整除的最大和 解析代码 力扣1262. 可被三整除的最大和 1262. 可被三整除的最大和 难度 中等 给你一个整数数组 nums&#xff0c;请你找出并返回能被三整除的元素最大和。 示例 1&#xff1a; 输入&#xff1a;nums [3,6,5,1,8] 输出&#xff1a;1…