首页 > 其他分享 >暑假数论

暑假数论

时间:2024-05-17 13:42:47浏览次数:17  
标签:方程 gcd 数论 long varphi exgcd 暑假 ax

同步发表

前言

因为 \(2025\) 届暑假的时候 tad 疯狂的在讲课,而且用了很多高端的东西和证明导致我在暑假的时候数论板块几乎没有听懂,所以我决定写下这篇文章不让当时的悲剧重演。

本篇文章都只讲结论,因为证明分复杂而且没有什么用,在暑假记住结论就好了,至于证明的坑后面会填

欧拉函数

欧拉函数 \(\varphi (n)\) 定义为小于或等于 \(n\) 且与 \(n\) 互质的正整数的个数。

欧拉函数之所以需要学,就是因为它又一些奇奇怪怪的性质:

  1. 如果 \(p\) 是质数,那么 \(\varphi(p)=p-1\)。
  2. \(\varphi\) 是积性函数,即如果 \(\gcd(a,b)=1\) 那么 \(\varphi(a\cdot b)=\varphi(a)\cdot \varphi(b)\)。
  3. 对于任意 \(n\) 满足 \(\sum_{d\mid n}\varphi(d)=n\),\(a|b\) 的意思是 \(\gcd(a,b)=a\)。

不定方程

不定方程可以使用 \(\operatorname{exgcd}\) 进行求解,先给代码。


int exgcd(int a,int b,int &x,int &y){
	if(b==0){
		x=1,y=0;
		return a;
	}
    int ans=exgcd(b,a%b,y,x);
	y-=a/b*x;
	return ans;
}

\(\operatorname{exgcd}\) 函数可以求解方程 \(ax+by=\gcd(a,b)\)(\(a,b\) 为常数)的整数根 \(x,y\)。

调用 exgcd(a,b,x,y) 的返回值为 \(\gcd(a,b)\),在调用时 \(x,y\) 是没有意义的,在调用之后 \(x,y\) 就会成为方程的一组解。

但是如果需要求解 \(ax+by=c\),那么我们可以先求解 \(ax+by=\gcd(a,b)\),接着将将 \(x,y,\gcd(a,b)\) 全部乘以 \(\dfrac{c}{\gcd(a,b)}\) 就可以了。

如果 \(\dfrac{c}{\gcd(a,b)}\) 不是整数,那么这个方程就无解。

「NOIP2012」同余方程 && 使用 \(\operatorname{exgcd}\) 求解逆元

这个题目求解的其实就是 \(a\) 在模 \(b\) 意义下的逆元。

因为方程保证有解也就是保证 \(a\) 有逆元,所以我们可以知道 \(\gcd(a,b)\) 一定是 \(1\)。

同余方程经过变形可以得到 \(ax=1+by\),在经过移项得到 \(ax+b(-y)=1\)。

因为 \(y\) 不许要输出所以他的符号可以不管而且 \(\gcd(a,b)=1\),那么方程就成为了 \(ax+by=\gcd(a,b)\) 了,直接使用 \(\operatorname{exgcd}\) 求解。

因为 \(x\) 可能不是最小的正整数,所以输出 \((x+b)\%b\) 即可。

一般性同余方程

对于同余方程 \(ax \equiv b \pmod n\),我们需要找到一个整数x,使得ax除以n的余数为b。这个问题可以通过以下步骤解决:

  1. 计算 \(\gcd(a,n)\):首先,我们需要计算 \(a\) 和 \(n\) 的最大公约数 \(d\)。这可以通过欧几里得算法实现。

  2. 检查 \(b\) 是否是 \(d\) 的倍数:如果 \(b\) 不是 \(d\) 的倍数,那么这个同余方程无解。因为如果 \(ax\) 除以 \(n\) 的余数为 \(b\),那么 \(b\) 必须是 \(a\) 的倍数。但是,如果 \(b\) 是 \(d\) 的倍数,那么我们可以继续下一步。

  3. 求解同余方程:然后,我们需要求解同余方程 \(ax' \equiv b' \pmod {n'}\),其中 \(x' = x/d\),\(b' = b/d\),\(n' = n/d\)。

  4. 找到最小的正整数解:最后,我们需要找到最小的正整数解。这可以通过对x取模n来实现。

因为这可能不好实现,所以我封装了一个函数。


long long extended_gcd(long long a, long long b, long long &x, long long &y) {
    if (b == 0) {
        x = 1;
        y = 0;
        return a;
    }
    long long x1, y1;
    long long gcd = extended_gcd(b, a % b, x1, y1);
    x = y1;
    y = x1 - (a / b) * y1;
    return gcd;
}
long long solve_congruence(long long a, long long b, long long n) {
    long long x, y;
    long long gcd = extended_gcd(a, n, x, y);
    if (b % gcd != 0) {
        return -1;  // 无解
    }
    x *= b / gcd;
    n /= gcd;
    x = (x % n + n) % n;  // 转化为最小的正整数解
    return x;
}

标签:方程,gcd,数论,long,varphi,exgcd,暑假,ax
From: https://www.cnblogs.com/liudagou/p/18197642

相关文章

  • 【CodeChef】Origin(数论)
    题目大意:\(f(x)=\begin{cases}x,1\lex\le9\\f(x的各数位之和),x>9\\\end{cases}\)求\(\sum_{i=1}^{n}f(i)\)。根据打表找规律,我们会发现\(f(x)=(x-1)\bmod9+1\)。所以\(\sum_{i=1}^{n}f(i)\)\(=\sum_{i=1}^{\lfloor\frac{n}{9}\rfloor\cdot9}f(x)+\sum_{i=\l......
  • [数论] 二项式反演
    菜就多练,输不起就别玩,不会就是不会。二项式推论\(1.\)\(\tbinom{n}{m}=\tbinom{n}{n-m}\)\(2.\)\(\tbinom{n}{m}=\frac{n}{m}\tbinom{n-1}{m-1}\)\(3.\)\(\sum\limits_{i=0}^nC_n^i=2^n\)证明:拆\((1+1)^n\)\(4.\)\(\sum\limits_{i=0}^n(-1)^iC_n^i=0\)特殊的,......
  • [数论] 原根
    书接上回...我们知道,我们在使用FFT时,靠的是单位根\(\omega\)。数学家证明这是复数域中唯一符合条件的数。可是它的浮点误差和带来的巨大运算时间使我们有点不能接受。于是,我们想想能不能找个替代品替代掉\(\omega\)。于是,原根就出现了!原根的引入阶对于一个数\(x\),在......
  • 2024ICPC武汉邀请赛-G.Pack-数论分块、整除运算相关的不等式
    link:https://codeforces.com/gym/105143Groupcontests:https://codeforces.com/group/DWEH34LQgT/contest/521901题意:有\(n\)件\(A\)物品,\(m\)件\(B\)物品,两种物品价值分别是\(a,b\),若干件\(A\)和若干件\(B\)可以打包成一个商品,打包尽可能多的商品的情况下让剩余的......
  • [学习笔记] 乘性函数 - 数论
    [SDOI2012]Longge的问题我们要求\(\sum\limits_{i=1}^n\gcd(i,n)\),但\(gcd\)没啥卵用,所以尝试给这n个正整数分组。对于\(gcd(i,n)=1\)的数给他们归到\(G(1)\)这个集合里去,当然,这个集合元素的数量为\(\phi(n)\)。对于\(gcd(i,n)=2\)的数归到\(G(2)\)这个集合里去......
  • [数论] 复数
    从小学我们就知道\(i=\sqrt{-1}\)。复数一般写作\(a+bi\)复数四则运算加法:\((a+bi)+(c+di)=(a+c)+(b+d)i\)减法就是取个相反数。乘法:\((a+bi)\times(c+di)\)\(=ac+(ad+bc)i+bd\timesi^2\)\(=(ac-bd)+(ad+bc)i\)共轨复数\(a+bi\)的共轨复数是\(a-bi\),它们相......
  • 数论进阶
    数论进阶原根与阶阶若\(a,p\)互质,定义\(a\)在模\(p\)意义下的阶为最小的正整数\(t\)满足\(a^t\modp=1\)。\(a\)在模\(p\)意义下的阶记作\(ord_p(a)\),\(a^{ord_p(a)}\modp=1\)。对于整数\(k\),\(a^k\equiv1(\modp)\)当且仅当\(ord_p(a)|k\)。计算......
  • [学习笔记] 质数与唯一分解定理 - 数论
    素性测试素性测试就是判断某个数是否为质数。费马小定理内容:若\(p\)为质数,\(a\)为任意整数,有\(a^{p-1}\equiv1(mod\p)\)那么可以多次随机取一个基数\(a\in(1,p)\)若\(p\)满足上式,那么它为质数的可能性就越大。MillarRabin素性测试inlinellqpow(lla,lln,ll......
  • 数论
    数论常见筛法对于任意正整数\(A\),存在唯一集合{\((p_1,q_1),(p_2,q_2),\dots,(p_n,q_n)\)}满足\(A=\prod^n_{i=1}{p_i}^{q_i}\)\(\min(a,b)+\max(a,b)=a+b\)\(\gcd(a,b)\times\operatorname{lcm}(a,b)=ab\)埃氏筛在\(O(n\log\logn)\)时间内预处理出\([1,n]\)内所......
  • 网课-数论学习笔记
    埃氏筛P7960[NOIP2021]报数P1835素数密度:区间筛。预处理\(\sqrt{R}\)内的质数,然后用埃氏筛筛[L,R]的质数。线性筛-EOF-欧拉函数P10031「CfzRound3」XorwithGcd光速乘用于解决$$llTimes(lla,llb,llc){ ullt=(longdouble)a*b/c+0.5; llans=(u......