数论笔记(2025.01.22) 持续更新

news/2025/1/26 14:12:41/文章来源:https://www.cnblogs.com/SamXia/p/18691756

\(01.\)整除及证明

\(02.\) 特殊性质\(π(n) \approx n/logn\)

\(03.\) 质数有无穷多个

证明:

假设质数有最大数

令质数有\(n\)个,最大的质数为\(q_n\)

可构造一数 \(p=\)所有质数之积(\(q_1\times q_2\times q_3\times ……\times q_n\))

对于\(p+1\) 必然满足不整除于\(q_1,q_2,q_3,……,q_n\)

\(p+1\)为质数 且\(p+1>q_n\)

所以没有最大的质数 假设不成立

\(04.\)所有大于2的质数都可以唯一地表示成两个平方数之差

证明:

大于2的质数都为偶数 即对于任意质数\(k>2\)\(k \mod 2=1\)

而对于奇数k必有\(k=2m+1=(m+1 +m )(m+1 -m)=(m+1)^2-m^2\)

由此得证,且可同时证明两个平方数的差值为\(1\)

\(05.\)唯一分解定理

任意整数$ n = p_1^{a_1} \times p_2^{a_2} \times \cdots \times p_k^{a_k} $

因子个数 \(\tau(n) = (1 + a_1)(1 + a_2)(1 + a_3) \cdots (1 + a_k)\)

\(m\)的唯一分解:$m=\prod_{c} p_c^{a_c} $

例题:LuoguP1075

核心代码:

bool prime(long long n)
{if(n==1)	return false;if(n==2)	return true;	for(long long i=2;i<=sqrt(n);i++)if(n%i==0)return false;return true;
}

$06. $ 辗转相除: \(O(log n)\)/可重复贡献性

\(gcd(a,b)=gcd(a,b-ka) =>gcd(a,b)=gcd(a,b\)%\(a)\)

\(gcd(a,b,c)=gcd(gcd(a,b),gcd(b,c))\)

\(p.s.\)__ $ gcd() $ => \(STL自带最大公约数\)

例题: CF1562A

核心代码:

int k=r/2+1;if(k>=l)//case1//l在左边 cout<<r%k<<"\n";elsecout<<r-l<<"\n";

\(07.\) \(Stein\)算法:在高精度计算中避免取模

1.\(gcd(a,b)=gcd(a,a-b),a,b为奇数\)

2.\(gcd(a,b)=2*gcd(a/2,b/2),a,b为偶数\)

3.\(gcd(a,b)=gcd(a/2,b),a为偶数,b为奇数\)

4.\(gcd(a,b)=gcd(a,b/2),a为奇数,b为偶数\)

例题:LuoguP2152

注意:高精度要压位!!! 要不然过不了

其他套模板即可

\(08.\) \(gcd(a,b)\times lcm(a,b)=a \times b\)

\(p.s.\) \(lcm\)代码

int lcm(int a,int b)
{ return a/gcd(a,b)*b; } 

例题:AT_abc152_e

暴力思路 (直接照搬过不了此题):

for(int i=1;i<=n;i++)
{cin>>a[i];	lcm=a[i]*lcm/__gcd(a[i],lcm);
}

\(09.\)埃氏筛

代码如下,复杂度\(O(n\) \(logn)\)

注意要学习埃氏筛的时间复杂度计算方法


vector<int> Prime;
bool isPrime[maxn];
void Sieve(int n)
{memset(isPrime,1,sizeof isPrime);isPrime[0]=isPrime[1]=0;for(int i=2;i<=n;++i){if(isPrime[i]) Prime.push_back(i);for(int j=i*2;j<=n;j+=i)isPrime[j]=0;}return;
}

\(10.\)欧拉筛

写法1:数组模拟 应用于\(n>1e7\) (我自己打的 有bug可以反映)


void ola()
{for(int i=2;i<=n;i++){if(vis[i]==0)prime[++cnt]=i;for(int j=1;j<=cnt&&prime[j]*i<=n;j++){vis[prime[j]*i]=1;if(i%prime[j]==0)break;}}
}

写法2:\(vector\)做法

void Sieve(int n)
{memset(isPrime,1,sizeof isPrime);isPrime[0]=isPrime[1]=0;for(int i=2;i<=n;++i){if(isPrime[i]){ Prime.push_back(i); }each(ver,Prime){ // 从小到大遍历已经筛出来的质数if(1ll*i*ver>n) break;isPrime[i*ver]=0;if(i%ver==0){ break; }}}
}

\(11.\) 同余

符号表示:\(a\equiv b(mod\) \(p)\)

01.若\(a \equiv b\)\(c \equiv d\) \((mod\) \(m)\)\(a+c\equiv b+d(mod\) \(m)\)

02.若\(a \equiv b\)\(c \equiv d\) \((mod\) \(m)\)\(ac\equiv bd\) \((mod\) \(m)\)

03.若\(a \equiv b\) \((mod\) \(m)\)\(n \in N\)\(a^n\equiv b^n(mod\) \(m)\)

例题:LuoguP3861

核心思路:

一种状态转移
\(dp[i][j]=dp[i][j-1],a[i]\) \(\mid\) \(a[j]\)

另一种状态转移自己推 太长了不想打

12.费马小定理+乘法逆元

i.费马小定理

\(01.p\)为质数且\(gcd(p,\) \(a)=1\)\(a^{p-1} \equiv 1(mod\) \(p)\)

\(02.p\)为质数且\(gcd(p,\) \(a)=1\)\(a^{p} \equiv a(mod\) \(p)\)

ii.乘法逆元

\(01.\)定义: 若\(a \times v \equiv 1(mod\) \(p),\)\(v\)\(a\)在模\(p\)意义下的逆元

\(02.p\)为质数且\(gcd(p,\) \(a)=1\)\(a\)在模\(p\)意义下的逆元为\(a^{p-2}\)

证明:

$a^{p-1} \equiv1(mod $ \(p)\)(费马小定理)

\(a \times a^{p-2} \equiv 1(mod\) \(p)\)

因为\(a \times v \equiv 1(mod\) \(p)\)

\(v\)有一解为:\(a^{p-2}\)

求逆元代码:

const int mod = 998244353; 
int qpow(int a,int b,int p=mod)
{int res=1,tmp=a;while(b){if(b&1) res=1ll*res*tmp%p;tmp=1ll*tmp*tmp%p;b>>=1;}return res;
}
int inv(int k){ return qpow(k,p-2,p); }

例题:Luogu P2613

思路:求逆元+取模即可

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

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

相关文章

ARC_069 D - Menagerie 题解

atcoder 一道很有意思的模拟题啊。 思路很重要。 首先,我们只要知道连续两只动物的身份,就可以根据 \(s\) 推出所有动物的身份。 不妨假设我们知道第一只和第二只动物的身份,一共有几种情况呢? 用 \(1\) 代表羊,\(0\) 代表狼。 那么,共有 \(2^2=4\) 种情况,分别为: 00 …

『学习笔记』二分算法

今天记录二分知识点。 二分是一个简单清晰,实用性强的算法。 也是本人最喜欢的算法之一。 先给出二分模板吧!int l = 1, r = n;//初始值,根据情况而定while (l + 1 < r) {int mid = (l + r) >> 1;if (check(mid)) l = mid;// check函数判断左半部分是否不符合,更新…

回家之难难于蜀道难

回家难 之难于蜀道难 (仿写李白蜀道难)噫吁嚱,困乎难乎,回家之途,难于上班路。 盘古及女娲,开天辟地捏人烟,尓来文明已万年,难解归家争吵事。 游子无钱难上路,漂留外地护空城。 千思万想定下来,踏上归途望团年。 上有爸妈在老家,下有孩童八九岁。 列车无票不得行,驱…

MAC|Edge——下载视频

解码错误解码错误指的是当前音/视频帧与浏览器不兼容,可以尝试以下方式:1.chrome/edge 浏览器打开chrome://flags,搜索 Hardware-accelerated video decode,选择 disabled2.如果解码错误仍然存在,请对视频进行转码处理,以修复问题帧3.firefox浏览器请打开about:support,…

stdio.h的缓冲机制解析

在C语言中,由于stdio.h中的缓冲机制,printf的输出常令人感到迷惑。本文将介绍其缓冲机制的具体细节1. 令人迷惑的printf() 在C语言中,由于stdio.h中的缓冲机制,printf的输出通常会受到缓冲区的影响。 这种影响可能非常微妙,并常常令人疑惑,比如我们来看下面这段代码 #inc…

【新能源行业】新能源汽车电子驻车制动系统(EPB)谁在做?

长期以来,汽车的动力系统一直是人们所关注的焦点,然而,汽车制动系统在背后默默支撑起整个汽车安全与稳定。其重要性丝毫不亚于动力系统。行车上路,安全第一。在每一次的启程与停驻之间,唯有制动系统作为坚实保障,才能让每一次出行都安心无虞。一、制动系统分类与组成 目前…

如何从内存中提取shellcode

恶意程序有时会直接在内存中运行shellcode 。在这篇文章中,我将向你展示如何从内存中获取shellcode。 shellcode在内存中的位置 在内存中分配shellcode的常用方法是使用VirtualAlloc来分配具有所需权~限的内存。然后恶意软件使用RtlMoveMemory将shellcode写入分配的空间。然后…

施耐德UNITY中使用ST 语言计算日均值

以前做过练习,在unity中计算分钟均值和小时均值,做成自定义功能块。今天在家打算按照同样的思路,试着做一下日均值。 第一次打算建立一个三维数组PV_DAY[0..23,0..59,0..59],每秒存放一个数据,编译的时候提示数组太大。 第二次尝试建立24个数组,每个数组存放一个小时内36…

【转载】rpm 和 yum 软件包的应用

本节所讲内容:8.1 使用rpm命令-安装-查看-卸载-rpm软件包8.2 yum管理软件包8.3 CentOS8中使用DNF管理软件包8.4 实战tar源码包管理-源码包安装方法8.1 软件包的管理软件包的类型rpm二进制包------》已经使用GCC编译后的(二进制已经可以被操作系统直接执行了)tar源码包-----》…

[Redis] Redis (5) 多核多线程架构

序 引言Redis 作为一款高性能的内存数据库,以其简单的设计和单线程模型(潜台词:单核单线程)广受欢迎。 然而,随着用户需求和数据规模的增长,单线程的架构逐渐成为 Redis 性能的瓶颈。 近年来,Redis 开始引入部分多线程机制,以提高并发性能,特别是在处理网络 I/O 和数据持…

Python并行计算与高性能计算7迎接并行计算革命

在本章中,我们将介绍我们在前几章中看到的并行编程的实际方面。随着并行计算概念的扩展,它不仅包括并行编程及其相关方面,还包括能够管理并专门设计的基础设施。超级计算机通常被定义为由许多 CPU 和 GPU 组成的高性能系统,其中应用了并行计算和高性能计算 (HPC) 方法。本章…

人脸识别和神经风格转换

人脸识别和神经风格转换 人脸识别人脸验证(Verification):验证输入图像是否属于某个特定身份,属于一对一问题。 人脸识别(Recognition):一对多问题,从大量数据中找到匹配的人脸。 在很多人脸识别应用中,系统需要通过单一样本识别某人,而非多个样本,这就属于 One-shot Le…