数论day1 —— 基础知识(们)

这篇博客详细介绍了数论的基础知识,包括一元一次同余方程、二元一次不定方程、欧拉定理、逆元、中国剩余定理、Lucas定理、容斥原理、卡特兰数、组合数求法、积性函数和线性筛等。通过实例解析和公式讲解,帮助读者深入理解数论的基本概念和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=61632537
向大(hei)佬(e)势力学(di)习(tou)

这已经是第二次系统的学数论了,idy学长讲的好清晰。学得糊怪我。

1 一元一次同余方程
2 二元一次不定方程
3 欧拉定理
4 逆元
5 中国剩余定理
6 Lucas 定理
7 容斥原理
8 卡特兰数
9 各种组合数求法
10 积性函数
11 线性筛

1一元一次同余方程

如何解形如 ax≡b(mod m)的方程
其实,同余方程可以写成另一种形式 ax+mt=b(t为某整数),这样一来就有两个未知数了,用下面的二元一次不定方程解出x即可
然而,还有一种做法
分类讨论
1 gcd(a,m)==1 可以求出在模m意义下a的逆元,两边都乘上逆元即可
2 gcd(a,m)!=1
(1)gcd(a,m)-|b 无解
(2)gcd(a,m)|b 方程每个项都除gcd(包括m),然后执行1步骤

2二元一次不定方程

当我们要解整数方程 ax+by=c
根据拓展欧几里得可知 总有x,y满足 ax+by=gcd(a,b),我们希望由此方程*c/gcd(a,b)得出解
令d=gcd(a,b)
1 d-|c 无解,因为无法乘上一个整数
2 d|c 用拓展欧几里得解出x0,y0,再乘上c/d(当然,其中的x0,y0是多解)

3欧拉定理

欧拉函数定义:
phi(n)=|{i∈[1,n]|gcd(i,n)=1}|
即[1,n]中与n互质的数的个数(模n的缩系的大小)
其中有一些性质
1 phi(nm)=phi(n)*phi(m) (gcd(m,n)=1)积性函数
2 phi(n)=n ∏(p|n) (1-1/p) 用于手算
3 n= ∑d|n phi(d) 在一些题目中可以将n化为此形式,会有特殊效果

欧拉定理
if gcd(a,n)=1 , then a^phi(n) ≡ 1 (mod n)
这个定理一般用来求逆元或对指数取膜*(在模意义下,如果指数太大,可以对指数mod phi)
对我来说,这个性质在day2的离散对数和原根有用

欧拉定理还有一个比较有用的扩展
if q>=phi(n) , then a^q≡a^(q mod phi(n)+phi(n)) (mod n)
这样就不需要a与n互质了(然而见识短浅的我并不明白有什么用T_T)

4逆元

在模m意义下,如果gcd(a,m)=1,设b,使得b满足 ab≡1(mod m),则称b为a在模m的逆元
有两种方式求逆元
1 由欧拉定理得,因为gcd(a,m)=1,所以a^(phi(m)-1) *a ≡1(mod m),则a^(phi(m)-1)即为a的逆元。
2 ab≡1(mod m) 可以写成 ab+mt=1的形式,其中b,t是未知数,可以由拓展欧几里得解出b来

这两种方法都二斤八两,一个快速幂带log,一个exgcd带log,不过exgcd通常还是要快点吧?

5中国剩余定理(孙子定理)

(怕还是需要一点篇幅哦,要证明的话)
对于同余方程组 x≡ai (mod

### 如何准备蓝桥杯Java比赛 #### 制定合理的学习计划 为了高效备考蓝桥杯Java比赛,制定科学的学习计划至关重要。根据以往参赛者的经验,在两个月的时间内集中精力复习和练习可以取得显著效果[^1]。建议将时间分为几个阶段:基础知识巩固、算法训练以及模拟考试。 #### 使用优质学习资源 蓝桥云课提供了针对初学者友好的Java教学视频,特别适合用于快速掌握编程基础及常见数据结构与算法。如果遇到难以理解的内容,还可以借助AcWing平台寻找更详细的讲解和题解来辅助学习。此外,《CC150》是一本非常经典的书籍,它不仅介绍了多种解决算法问题的方法,还强调了一些实用技巧如心算能力培养、利用Excel处理复杂计算等[^2]。 #### 掌握核心知识点 从历届试题来看,蓝桥杯考察范围广泛但重点突出,主要包括但不限于以下几个方面: - **查找技术** - **深度优先搜索(DFS)、宽度优先搜索(BFS)** - **动态规划** - **数论基本概念** - **暴力枚举策略** 熟悉这些主题并通过大量实践加深理解是提高成绩的关键所在。 #### 解决实际问题实例分析 以一道具体题目为例说明如何应用上述理论知识解决问题。考虑这样一个场景——给定一个整数X及其位置K,我们需要提取出该数字位于指定索引处的具体数值。通过递归函数实现这一目标时需要注意边界条件设置正确与否直接影响最终结果准确性[^4]: ```java public class Main { static int len(int x){ if(x<10) return 1; return len(x/10)+1; } // 取x的第k位数字 static int f(int x, int k){ if(len(x)-k==0) return x%10; return f(x/10,k); } public static void main(String[] args) { int x = 23513; System.out.println(f(x,3)); } } ``` 另一个例子涉及日期运算逻辑判断特定条件下满足要求的第一年份是什么时候。此过程需要用到Calendar类库完成相应操作并验证每周几对应关系是否符合预期设定标准[^5]: ```java import java.util.Calendar; public class Main { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); for (int year = 1999; year < 10000; year += 100) { calendar.set(year, 11, 31); if (calendar.get(Calendar.DAY_OF_WEEK) == 1) { System.out.println(year); break; } } } } ``` #### 总结 综上所述,成功备战蓝桥杯Java竞赛需要综合运用多方面的技能,包括扎实的基础知识积累、灵活运用各种算法的能力以及丰富的实战演练经历。希望以上信息能够帮助您更好地规划自己的备赛之路!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值