入门数论定理

一.算术基本定理

算术基本定理:任何一个大于 1 的自然数可以分解成一些素数的乘积;并且在不计次序的情况下,这种分解方式是唯一的。
算术基本定理可表述为:

最早证明是由欧几里得给出的。

二.唯一分定理

唯一分解定理入门
一个数n肯定能被分解成 *n=p1^a1 * p2^a2 . . .pn^an
因为一个数肯定是由合数和质数构成的,合数又可以分解成质数和合数,最后递归下去就会变成质数的乘积
下面是唯一分解定理的两个小应用

1,求出数n的因子个数
(1+a1) * (1+a2) * (1+a3) * (1+a4) … * (1+an)
a1,a2,这些分别是素数因子的幂次数
因为当a1=3时那n的因子肯定会有 p1 ^ 0,p1 ^ 1, p1 ^ 2, p1 ^ 3 这四个数
然后再和p2的个数搭配起来就是两个数的因子数相乘了 p1^x 可以与 p2^y 随意搭配,所以进行乘法

2.求所有的因子之和
这个其实也就是和上面这个一样的道理,不过我们求的是和,所以我们要把所有的因子和求出来
公式:
(q1 ^ 0 + q1 ^ 1 + q1 ^ 2 … q1 ^ a1)(q2 ^ 0 + q2 ^ 1 + q2 ^ 2 … q2 ^ a2) … (qn ^ 0 + qn ^ n + qn ^ 2 … qn ^ an)
因为每一项都有个1就代表是原来的自己那一项,后面都是组合项

在这里插入图片描述

三.欧拉函数

在数论中,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)
在这里插入图片描述

四.欧几里得算法

1.欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。
计算公式gcd(a,b) = gcd(b,a mod b)。 即原理
证明:
在这里插入图片描述

int gcd(int a,int b)
{
    return a%b==0?b:gcd(b,a%b);

2.扩展欧几里得
一个大佬写的,超级详细:——>https://www.cnblogs.com/wenzhixin/p/9343434.html

需要先了解一个定理:贝祖定理
(如果想要深入理解,我建议找个闲的时间,因为在这小小定理背后,我看到了不少新名词…)
若设a,b是整数,则存在整数x,y,使得ax+by=gcd(a,b)
详细推理:(很清晰,随手可推。建议亲自上手)
在这里插入图片描述
扩展欧几里德算法是用来在已知a, b求解一组x,y使得ax+by = Gcd(a, b) =d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中

int exgcd(int a, int b, int &x, int &y) //x,y有取地址符号,所以可以在主函数直接用
{
    if(b==0) {
        x = 1;
        y = 0;
        return a;
    }
    int r = exgcd(b, a%b, x, y);
    int t = x;
    x = y;
    y = t-a/b*y;
    return r;//顺便返回a,b的最大公约数
}

Exgcd
扩展欧几里得用途

1.求 ax + by = m 的解 (m是gcd(a,b)的倍数时有解)

第一步 :给出方程 ax + by = c
第二步 :根据 c % gcd(a, b) 判断是否 ax + by = c 有解
第三步 :算出辗转相除法 gcd(a, b)
第四步 :运用扩展欧几里德 ex_gcd(a, b)-> ax + by = gcd(a,b) 的 一组解(x, y)

1.2求最小整数解

扩展欧几里得有通解公式如下:
x=x0+b/gcd(a,b)*t
y=y0-a/gcd(a,b)*t

通解推导过程:
————————————————————————
ax + by = gcd(a,b) ①
ax0 + by0 = gcd(a,b) ②(x0,yo为一组解)

①﹣②:a(x-x0)+b(y-y0)=0

a(x-x0)=b(y0-y)

将两边同除以gcd(a,b),得 a/gcd(a,b)与b/gcd(a,b)互质,

所以 a/gcd(a,b)(x-x0)= b/gcd(a,b)(y0-y)

所以 x-x0=b/gcd(a,b)*k
y0-y=a/gcd(a,b)*k

故: x=x0+b/gcd(a,b)k
y=y0-a/gcd(a,b)k
—————————————————————————
根据 ax + by = c 的通解公式
x1 =(x0+k
(b/gcd(a,b)))
令 t=b/gcd(a, b)
则 x1 = x0 + k
t
所以 x1 的 最小正整数解为 :
x1 = (x1 % t + t)%t , 对应的 y1带入可原式求得:(c - a*x1)/ b

2.求逆元

2.1求乘法逆元

当有ax≡1(mod b)—1 时,x称做a的乘法逆元
一个数有逆元的充分必要条件是gcd(a,b)=1

原式可转变为:ax=k*b+1

即ax+b*(-k)=1

令y=-k: ax+by=1 —2

2 式可用扩展欧几里得算法求出x0的值

其中最小逆元 x=(x0%b+b)%b

2.2 求除法逆元:

当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法:

设c是b的逆元,则有b*c≡1(mod m);

则(a/b)%m = (a/b)1%m = (a/b)bc%m = ac(mod m);

即a/b的模等于a*(b的逆元)的模;

五.威尔逊定理

在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件。即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p ) 即:p可整除(p-1)!+1,但是由于阶乘是呈爆炸增长的,其结论对于实际操作意义不大,但可以直接来运用该性质。

六.费马小定理,欧拉定理

费马小定理:若p是质数,且p与a互质则 a^(p-1) ≡1(mod p)
欧拉定理:若n,a为正整数,且gcd(a,n) = 1,则a^φ(n) ≡ 1 (mod n)
欧拉定理是费马小定理的引申。

也常化成用来求逆元的形式:a^(p-2) ≡a^(-1)(mod p)
比如:
(a/b)%p=( a%p(1/b)%p )%p
——> (1/b)%p=b^(p-2)%p

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值