数论是纯粹数学的分支之一,主要研究整数的性质。整数可以是方程式的解(丢番图方程)。有些解析函数(像黎曼ζ函数)中包括了一些整数、质数的性质,透过这些函数也可以了解一些数论的问题。透过数论也可以建立实数和有理数之间的关系,并且用有理数来逼近实数(丢番图逼近)。按研究方法来看,数论大致可分为初等数论和高等数论。初等数论是用初等方法研究的数论,它的研究方法本质上说,就是利用整数环的整除性质,主要包括整除理论、同余理论、连分数理论。高等数论则包括了更为深刻的数学研究工具。它大致包括代数数论、解析数论、计算数论等等。//引自百度百科
建议搭配食用:我的小目录
1.1 整除
设a是非零整数,b是整数。如果存在一个整数q,使得b=a*q,那么就说b可被a整除,记作a∣b,且称b是a的倍数,a是b的约数(因子)
整除具有以下一些性质
- 如果a∣b且b∣c,那么a∣c
- a∣b且a∣c等价于对任意的整数x和y,有a∣(b×x+c×y)
- 设m≠0,那么a∣b等价于(m×a)∣(m×b)
- 设整数x和y满足下式:a×x+b×y=1,且a∣n,b∣n,那么(a×b)∣n
证明略
- 若b=q×d+c,那么d∣b的充要条件是d∣c
(因为一些傻狗原因,这个*不太好用)
没有例题
1.2 同余
若a,b为两个整数,且他们的差a-b能被某个自然数m所整除,则称a在%m意义下与b同余,记为a≡b(mod m)。它意味着,a-b=m*k(k为一个整数)
对于整数a,b,c和自然数m,n,对模m同余具有以下性质
- 自反性 a≡a(mod m)
- 对称性 若a≡b(mod m),则b≡a(mod m)
- 传递性 若a≡b(mod m),b≡c(mod m),则a≡c(mod m)
- 同加性 若a≡b(mod m),则a+c≡b+c(mod m)
- 同乘性 若a≡b(mod m),则a×c≡b×c(mod m);若a≡b(mod m),c≡d(mod m),则a×c≡b×d(mod m)
- 同幂性 若a≡b(mod m),则aⁿ≡bⁿ(mod m)
- 推论1: a*b mod k = (a mod k) * (b mod k) mod k
- 推论2: 若a mod p = x,a mod q = x,p、q互质,则a mod p*q = x
-
同余不满足同除性
例题:洛谷P1226
快速幂取模
输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。
输入输出格式
输入格式:
三个整数b,p,k.
输出格式:
输出“b^p mod k=s”
s为运算结果
输入输出样例
输入样例#1:
2 10 9
输出样例#1:
2^10 mod 9=7
#include <bits/stdc++.h>
using namespace std;
typedef long long ll
ll b,p,k;
ll ans;
ll pow_mod(ll t) {
if (t == 1) return b%k;
ans = Mod(t/2);
ans = (ans*ans)%k;
if (t%2 == 1) ans = (ans*(b%k))%k;
return ans;
}
int main() {
cin >> b >> p >> k;
cout << b << '^' << p << " mod " << k << '= '<< pow_mod(p) << endl;
return 0;
}
这个看一眼推论一就会了⑧
1.3 最大公约数(GCD)
最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。
求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。与
最大公约数相对应的概念是最小公倍数。
注:a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),a,b的最小公倍数记为[a,b]。(这个写法只有天朝能用哦,老外不认的哦)
1 辗转相除法
原理:GCD(x,y)=GCD(y,y-x)
int GCD(int x,int y) {
return y == 0 ? x : GCD(y,x%y);
}
2 二进制算法
通过不断去除因子2来降低常数
若x=y,则GCD(x,y)=x,否则
(1) 若x,y均为偶数,则GCD(x,y)=2*GCD(x/2,y/2)
(2) 若x为偶数,y为奇数,则