数论学习笔记-初等数论基础(最先阅读)

初等数论基础


前言

这篇博客是数论笔记的第0章,主要内容包括:整除概念,唯一分解定理,约数个数,约数和,筛质数,分解质因数,欧拉函数


一、整除与基本数学符号

1.1 整除定义与性质

如 果 n % d = = 0 , 那 么 n 是 d 的 倍 数 , d 是 n 的 约 数 , 即 d 能 整 除 n , 即 为 d ∣ n 如果n \% d==0,那么n是d的倍数,d是n的约数,即d能整除n,即为d|n n%d==0,nddndndn

  • 下面给出整除的一些性质
  1. a ∣ b , b ∣ c = > a ∣ c a|b,b|c =>a|c ab,bc=>ac
  2. a ∣ b , a ∣ c = > a ∣ k b + l c a|b,a|c=>a|kb+lc ab,ac=>akb+lc
    整除是数论的基石

1.2 求和与连乘

1.2.1 求和

在这里插入图片描述
根据整除符号以及求和符号的学习尝试写出这个式子:在这里插入图片描述
答案:
在这里插入图片描述
求和的三个性质:
在这里插入图片描述
注:以上三个性质在做杜教筛题目或者反演题目时经常使用。
注意!!!
∑ i = 1 n a ⋅ b ! = ∑ i = 1 n a ⋅ ∑ i = 1 n b , 建 议 笔 算 验 证 , 除 法 同 理 \sum_{i=1}^na\cdot b \quad !=\sum_{i=1}^na\cdot\sum_{i=1}^nb,建议笔算验证, 除法同理 i=1nab!=i=1nai=1nb,

1.2.2 连乘

在这里插入图片描述
为更好理解连乘符号:给出在这里插入图片描述
其实可以注意到连乘即是阶乘函数。
在这里插入图片描述

1.3 带余除法

在这里插入图片描述
特别的,如果a,b除以c的余数相等,则称a,b模c同余,记做a同余b(mod c)
即a%c==b%c,则a,b模c同余。

1.4 素数(质数)

在这里插入图片描述

1.4.1 试除法求素数

试除法原理:n是素数当且仅当它不能被任何一个小于sqrt(n)的素数整除,

bool isprime(int n)
{
	if(n<2) return false;
	for(int i = 2;i<=n/i;i++)
	{
		if(n%i==0) return false; 
	}
	return true;
}

1.4.2 线性筛质数

原理:每个数只被最小的质因子筛去,时间复杂度O(n)

const int N = 100010;
bool st[N];
int primes[N];
int cnt;
void get_primes(int n)
{//线性筛1~n的素数
	for(int i = 2;i<=n;i++)
	{
		if(!st[i])
		{
			primes[cnt++] = i;
		}
		for(int j = 0;j<cnt&&i*primes[j]<=n;j++)
		{
			st[i*primes[j]] = true;
			if(i%primes[j]==0)
				break;
		}
	}
}
//prime即是素数数组

小性质1:1~n的质数个数大约是 n l n n 个 \frac n {lnn}个 lnnn
小性质2:第n个质数的大小大约是 n l o g ( n ) nlog(n) nlog(n)

1.4.3 素因数分解

对于一个整数n,把它分解成若干个质因数相乘。
例题一:链接
给定 n 个正整数 ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。
code:

#include<bits/stdc++.h>
using namespace std;

int n;
int main()
{
    cin>>n;
    while(n--)
    {
        int a;
        cin>>a;
        for(int i = 2;i<=a/i;i++)
        {
            //由质因数分解定理知,N = p1^a1*p2^a2^...pk^ak一定有p1,p2...pk相互互质
            //那么a对i做除法过后,对其他质因数分解是不会产生影响的
            if(a%i==0)
            {
                int s = 0;
                while(a%i==0)
                {
                    a/=i;
                    s++;
                }           
                cout<<i<<" "<<s<<endl;
            }
        }
        if(a>1)  cout<<a<<" "<<1<<endl;
        cout<<endl;
    }
    return 0;
}

二、gcd,lcm与唯一分解定理

2.1 gcd与lcm

2.1 定义与性质

g c d ( a , b ) 表 示 a 和 b 的 最 大 公 约 数 , 一 般 用 ( a , b ) 表 示 。 l c m ( a , b ) 表 示 a 和 b 的 最 小 公 倍 数 , 一 般 用 [ a , b ] 表 示 , 易 知 l c m ( a , b ) = a / g c d ( a , b ) ∗ b gcd(a,b)表示a和b的最大公约数,一般用(a,b)表示。\\ lcm(a,b)表示a和b的最小公倍数,一般用[a,b]表示,易知\\lcm(a,b) = a/gcd(a,b)*b gcd(a,b)ab(a,b)lcm(a,b)ab[a,b]lcm(a,b)=a/gcd(a,b)b
性质0:
在这里插入图片描述

性质1:
在这里插入图片描述
数学符号记为:a⊥b
性质2:

注 意 一 个 有 意 思 的 性 质 : 虽 然 1 既 不 是 合 数 也 不 是 质 数 但 是 g c d ( 1 , 1 ) = 1 注意一个有意思的性质:虽然1既不是合数也不是质数\\但是gcd(1,1) = 1 1gcd(1,1)=1

2.2 辗转相除法求gcd(a,b)

详细手写证明也可以看另一篇博客~初等数论基础全览
g c d ( a , b ) = g c d ( b , a % b ) gcd(a,b) = gcd(b,a\%b) gcd(a,b)=gcd(b,a%b)
证明:
不 妨 设 d = g c d ( a , b ) , r = a % b 那 么 r = a − b ⌊ a b ⌋ 易 知 d ∣ a , d ∣ b , 且 ⌊ a b ⌋ 是 正 整 数 不 妨 令 k = ⌊ a b ⌋ , 则 r = a − b k 由 d ∣ a , d ∣ b 那 么 d ∣ a − b q ( q ∈ 任 意 正 整 数 ) ∴ d ∣ r , 则 有 d ∣ a , d ∣ b , d ∣ r ∴ a 和 b 的 约 数 与 b 和 r 的 约 数 相 同 ∴ g c d ( a , b ) = g c d ( b , r ) = g c d ( b , a % b ) \begin{aligned} &不妨设d = gcd(a,b),r = a\%b\\ &那么r = a-b\lfloor\frac a b\rfloor\\ &易知d|a,d|b,且\lfloor\frac a b\rfloor是正整数\\ &不妨令k = \lfloor\frac a b\rfloor,则r = a-bk\\ &\\ &由d|a,d|b那么d|a-bq\quad(q\in任意正整数)\\ &\therefore d|r,则有d|a,d|b,d|r\\ &\therefore a和b的约数与b和r的约数相同\\ &\therefore gcd(a,b) = gcd(b,r) = gcd(b,a\%b) & \end{aligned} d=gcd(a,b),r=a%br=abbada,db,bak=ba,r=abkda,dbdabq(q)dr,da,db,drabbrgcd(a,b)=gcd(b,r)=gcd(b,a%b)

typedef long long ll;
ll gcd(ll a,ll b)
{
	return b?gcd(b,a%b):a;
}

2.2 唯一分解定理(算术基本定理)

任何一个大于1 的数都可以被唯一分解成有限个质数乘积的形式。
n = ∏ i = 1 m p i C i = p 1 C 1 × p 2 C 2 × . . . × p m C m 其 中 , p 1 , p 2... p m 均 是 质 数 , C 1 , C 2... C m 均 是 正 整 数 n = \prod_{i=1}^{m}p_i^{C_i} = p_1^{C_1}×p_2^{C^2}×...×p_m^{C_m}\\其中,p1,p2...pm均是质数,C1,C2...Cm均是正整数 n=i=1mpiCi=p1C1×p2C2×...×pmCmp1,p2...pmC1,C2...Cm
例 如 36 可 以 唯 一 分 解 成 36 = 2 2 × 3 2 例如 36可以唯一分解成36 = 2^2×3^2 3636=22×32

2.2 正确性证明

后续更新


三、约数

3.1 约数定义

约数,又称因数,我们说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。

3.2 约数个数

对于一个整数N可以由算术基本定理写成:
N = p 1 C 1 × p 2 C 2 × . . . × p m C m 而 N 的 约 数 d 同 样 也 可 以 写 成 d = p 1 β 1 × p 2 β 2 × . . . × p k β k 再 由 算 术 基 本 定 理 可 以 知 道 只 要 β i 不 同 那 么 约 数 d 就 不 同 , 所 以 n 的 约 数 个 数 与 β i 的 选 法 是 相 等 的 由 乘 法 原 理 , 设 约 数 个 数 为 a n s 显 然 有 a n s = ( C 1 + 1 ) ( C 2 + 1 ) . . . . ( C k + 1 ) \begin{aligned} &N = p_1^{C_1}×p_2^{C_2}×...×p_m^{C_m}\\ &而N的约数d同样也可以写成\\ &d = p_1^{\beta_1}×p_2^{\beta_2}×...×p_k^{\beta_k}\\ &再由算术基本定理可以知道只要\beta_i不同\\ &那么约数d就不同,所以n的约数个数与\beta_i\\ &的选法是相等的\\ &由乘法原理,设约数个数为ans\\ &显然有ans = (C_1+1)(C_2+1)....(C_k+1) \end{aligned} N=p1C1×p2C2×...×pmCmNdd=p1β1×p2β2×...×pkβkβidnβiansans=(C1+1)(C2+1)....(Ck+1)

3.3 约数之和

如 果 N = p 1 c 1 × p 2 c 2 × . . . × p k c k 则 约 数 之 和 = ( p 1 0 + p 1 1 + . . . + p 1 c 1 ) ∗ . . . ∗ ( p k 0 + p k 1 + . . . p k c k ) 如果N =p_1^{c_1}×p_2^{c_2}×...×p_k^{c_k}\\ 则约数之和 = (p_1^0+p_1^1+...+p_1^{c_1})*...*(p_k^0+p_k^1+...p_k^{c_k}) N=p1c1×p2c2×...×pkck=(p10+p11+...+p1c1)...(pk0+pk1+...pkck)

四、欧拉函数

4.1 定义

在这里插入图片描述
由唯一分解定理:
在这里插入图片描述
则有:
φ ( N ) = N ⋅ ( 1 − 1 p 1 ) ⋅ ( 1 − 1 p 2 ) . . . . ( 1 − 1 p m ) \varphi(N) = N\cdot (1-\frac 1 {p_1})\cdot (1-\frac 1 {p_2})....(1-\frac 1 {p_m}) φ(N)=N(1p11)(1p21)....(1pm1)
关于证明后续更新~

由观察知:欧拉函数的值与N分解成的质因数的指数无关

欧拉函数筛法详见博客:积性函数与筛法求积性函数~
后续更新~

五、快速幂

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qmi(ll a,ll b,ll p)
{
    ll res = 1%p;
    while(b)
    {
        if(b&1) res = res*a%p;
        b>>=1;
        a = a*a%p;
    }
    return res;
}
int main()
{
    ll n;
    cin>>n;
    while(n--)
    {
        ll a,b,c;
        cin>>a>>b>>c;
        cout<<qmi(a,b,c)<<endl;
    }
    return 0;
}
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值