首页 > 其他分享 >[数论]Divisor and Gcd

[数论]Divisor and Gcd

时间:2023-06-17 09:12:27浏览次数:32  
标签:Divisor 数论 个位数 exgcd 原数 int ax 整除 Gcd

Divisor and Gcd

1、算术基本定理:n的质因数分解唯一

一些常见结论:
1.素数无限
2.\(\lim_{n\rightarrow+\infty}n\prod\dfrac{n}{\frac{n}{\ln{n}}}\)(Π(n)表示<=n素数的个数)
————即n以下素数个数大约是 \(\frac{n}{\ln(n)}\)级别的
3.\(Pn = O(nlogn)\)级别的 (Pn表示素数)
4.\(\prod_{i = 1}^{n}\dfrac{1}{i} = O(logn)\)
5.\(\prod_{i = 1}^{n}\dfrac{1}{p} = O(loglogn)\)

2.整除的常见性质:

a|b :b能被a整除
1.若\(a|b,a|c,\)则\(a|(b±c)\)。
证明:
\(b = q1*a,c = q2*a\)
$ b±c = q1a±q2a = (q1±q2)*a;$
$ ∴a|(b±c)\( 2.\)a|c,b|c,(a,b) = 1(互质) ==> ab|c\( 3.\)a|bc,(a,b) = 1 ==> a|c\( 4.\)p|ab ==> p|a或p|b$

3.公约数和公倍数

\(a = p1^{a1}*p2^{a2}...pk^{ak}\)
\(b = p1^{b1}*p2^{b2}...pk^{bk}\)
\(d = p1^{d1}*p2^{d2}...pk^{dk}\)

\(d|a ==> d1<=a1,d2<=a2..dk<=ak\)
\(d|b ==> d1<=b1,d2<=b2..dk<=bk\)
\(di<=min(ai,bi)\)

\((a,b) = Πpi^{(min(ai,bi))}\)
\([a,b] = Πpi^{(max(ai,bi))}\)
\(∴(a,b)[a,b] = a*b\)

▲竞赛中遇到能被xx整除的数的特征:
·能被2整除的数:个位上为2的倍数
·能被4整除的数:个位和十位所组成的两位数能被4整除
·能被8整除的数:百位、个位、十位所组成的三位数能被8整除(注意顺序)
·能被5整除的数:个位上为5的倍数
·能被25整除的数:十位和个位所组成的两位数能被25整除
·能被125整除的数:百位、十位、个位所组成的数能被125整除
·能被3整除的数:各个数位上的数字和能被3整除
·能被9整除的数:各个数位上的数字和能被9整除
·能被11整除的数:奇数位(从左往右数)上的数字和与偶数位上的数字和的差的绝对值能被11整除
·能被7整除的数:把个位数字截去,从余下的数中,减去个位数的2倍,如果差是7的倍数,则原数能被7整除,如果不好判断就递归处理
·能被13整除的数:把个位数字截去,从余下的数中,加上个位数的4倍,如果和是13的倍数,则原数能被13整除
·能被17整除的数:把个位数字截去,从余下的数中,加上个位数的5倍,如果和是17的倍数,则原数能被17整除,或把后三位截去,剩下的数与3倍后三位差的绝对值如果能被17整除,则原数能被17整除
·能被19整除的数:把个位数字截去,从余下的数中,加上个位数的2倍,如果和是19的倍数,则原数能被19整除,或把后三位截去,剩下的数与7倍后三位的差的绝对值如果能被19整除,则原数能被19整除

4.求公约数

1.欧几里得算法

d = a[1];
for(i = 2;i<=n;i++)
d = gcd(d,a[i]);
时间复杂度O(n+log(max ai))

2.另一种公约数的算法

·如果a,b都是奇数,那么\((a,b) = (a-b,b)\)
·如果a是偶数,b是奇数,那么\((a,b) = (a/2,b)\)
·如果a,b都是偶数,那么\((a,b) = (a/2,b/2)\)

5. 裴蜀定理(Bézout’s lemma)

是一个关于最大公约数的定理
其内容是:设a,b是不全为零的整数,则存在整数x,y , 使得$ax+by=gcd(a,b)
(a,b)|d <==> ax+by = d $存在整数解

6. 扩展欧几里得

扩展欧几里得算法实际上就是对于\(ax+by=gcd(a,b)\),一定有一组整数解x,y使其成立
\(a \bmod b = a-(a/b)*b\)
由归纳假设存在\(u',v'\)使得\(u'b+v'(a \bmod b) = d\)
即\(u'b + v'(a-(a/b)*b) = d\)
\(v'a + (u'-(a/b)v') = d\)
于是就得到了\((a,b)\)的解

\(eg.\)
\(ax+by = 1\)
\((b*(a/b)+a mod b)x+by = 1;\)
商 余数
$b(a/bx+y)+(a mod b)x = 1; $
$ x'$ $ y'$

系数由\((a,b)->(b,a mod b)\)

\(①100x + 87y = 1;\)
\(②87(x+y) + 13x = 1; ———————x = -20,y = 23\)
$ x3 $ $ y3$

\(③13*(6x2+y2)+9x2 = 1;—————— x2 = 3,y2 = -20\)
$ x3 $ \(y3\)
\(④13x3 + 9y3 = 1;\)
\((9+4)x3 + 9y3 = 1;\)
\(9(x3+y3)+4x3 = 1; ————————— x3 = -2,y3 = 3\)
\(x4\) \(y4\)
\(⑤(4*2+1)x4+4y4 = 1;\)
$ 4(2x4+y4)+x4 = 1;$
设\(2x4+y4 = 0,x4 = 1\)可以找到一组解
那$x4 = 1,y4 = -2 $ ——————————————————再返回去找解

知道了特解之后,我们可以通过他求出方程的所有解
\(x = x0+k*b/d\)
\(y = y0-k*a/d\)

exgcd代码演示

//输出ax−by=gcd(a,b)的最小非负整数解(x,y)
#include<bits/stdc++.h>
using namespace std;
//为了在计算最大公约数gcd(a,b)的同时,找到x,y,使得ax + by = d
int exgcd(int a,int b,int &x,int &y)
{
	if(b==0)
	{
		x = 1;
		y = 0;
		return a;
	}
	/*
	int xx,yy;
	int d = exgcd(b,a%b,xx,yy);
	x = yy,yy = xx-(a/b)*yy;
	*/

	/*
	int d = exgcd(b,a%b,x,y);
	int k = y;
	y = x-(a/b)*y;
	x = k;
	*/

	int d = exgcd(b,a%b,y,x);
	y -= (a/b)*x;
	return d;
}

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int a,b,x,y;
		cin>>a>>b;
		int d = exgcd(a,b,x,y);
		// cout<<"gcd = "<<d<<endl;
		// cout<<"x = "<<x<<" y = "<<y<<endl;
		//对于ax+by = d特解是x ,y
		//通解就是x1 = x + b/(a,b)*t,y1 = y - a/(a,b)*t 

		//我们求的是ax + by = d;
		//要求ax-by = d
		//ax - b(-y) = d
		y = -y;
		//求最小正整数解,我们用exgcd求出的是最小整数解,有可能是负数的
		while(x<0||y<0)x+=b/d,y+=a/d;
		while(x>=b/d&&y>=a/d)x-=b/d,y-=a/d;
		cout<<x<<" "<<y<<endl;
	}
	return 0;
}

标签:Divisor,数论,个位数,exgcd,原数,int,ax,整除,Gcd
From: https://www.cnblogs.com/nannandbk/p/17487014.html

相关文章

  • [数论]中国剩余定理CRT
    ChineseRemainderTheorem\(x≡ai(modmi)\)中国剩余定理CRT1.定义Th.给出一元线性同余线性方程组\(x≡a1\bmodm1\)\(x≡a2\bmodm2\)...\(x≡an\bmodmn\)定理指出假设素数\(m1,m2...mn\)两两互素,对任意的整数\(a1,a2...an\)上述方程有解,并且可以通过如下......
  • [数论]素数筛和整数分块
    PrimesievingandIntegerblocking一、Primenumbersievemethod1.埃氏筛O(nloglogn)从2开始,2是质数,那么2的倍数:4、6、8、10、12、14、16...肯定不是质数3是质数,那么3的倍数:6、9、12、15、18、21.....肯定不是质数4已经被筛去了(即被置为false),不是质数,那么4的倍数肯定......
  • [ABC162E] Sum of gcd of Tuples (Hard)
    题面翻译给定\(n,k\),求\[\sum^k_{a_1=1}\sum^k_{a_2=1}\sum^k_{a_3=1}\dots\sum^k_{a_n=1}gcd(a_1,a_2,a_3,\dots,a_n)\mod\1000000007\]制約$2\\leq\N\\leq\10^5$$1\\leq\K\\leq\10^5$。思路点拨我们看到这么多\(\gcd\)的式子,我们自然想到莫比乌斯反演......
  • (数论)判断素数(朴素,根号,埃氏筛,欧拉筛线性筛)
    //最基本求一个素数(on),(osqrt(n))#include<bits/stdc++.h>usingnamespacestd;intmain(){intn;cin>>n;for(inti=2;i<n;i++)//o(n)if(n%i==0){cout<<"no";return0;}for(i......
  • [数论]GCD&LCM&欧拉函——推柿子+例题
    GCD&LCM&欧拉函——推柿子一、\(\sum_{i=1}^{n}[\gcd(i,n)=d]\)\(\sum_{i=1}^{n}[\gcd(i,n)=d]\)\(=\sum_{i=1}^{\frac{n}{d}}[\gcd(i,\frac{n}{d})=1]\)\(=\phi(\frac{n}{d})\)二、\(\sum_{i=1}^{n}\gcd(i,n)\)\(\sum_{i=1}^{n}\gcd(i,......
  • Educational Codeforces Round 20-C. Maximal GCD
    原题链接C.MaximalGCDtimelimitpertestmemorylimitpertestinputoutputn.Youshouldcreatesuch strictlyincreasing sequenceof k positivenumbers a1, a2, ..., ak,thattheirsumisequalto nGr......
  • 数论基础
    求和符号的定义为了简化形如\(a_1+a_2+...+a_n\)这样求\(n\)个数的和的表述,引入求和符号\(\sum\),将上式重表述为\(\sum\limits_{i=1}^na_i\)。其中,\(i\)被称为指标变量,取值为从\(1\)到\(n\)的整数,\(a_i\)为关于\(i\)的函数。求和符号的性质定理1:\(\sum\limits_......
  • 【学习笔记】(14) 初等数论(一)
    1.【最大公约数(GCD)和最小公倍数(LCM)】【基本性质、定理】\(\largegcd(a,b)=gcd(b,a−b)(a>b)\)\(\largegcd(a,b)=gcd(b,a\)\(\largemod\)\(b)\)\(\largegcd(a,b)\)\(\largelcm(a,b)=ab\)【推导结论】\(\largek|gcd(a,b)⟺k|a\)且\(k|b\)\(\larg......
  • 数论-裴蜀定理-扩展欧几里得算法
    裴蜀定理对于任意的整数a、b,都存在一对整数x、y(注意x和y可以是负整数),使得\(ax+by=gcd(a,b)\)成立。或者可以这样描述:对方程\(ax+by=c,(a,b,c∈Z)\),只有满足\(gcd(a,b)|c\)(即a和b的最大公约数可以整除c),方程才有整数解。扩展欧几里得算法的证明已知\(gcd(a,b)=gcd(b,a\%b)\)......
  • 「外出学习」数论学习笔记
    取模\[(1)\quad5\div3=1\cdots2\\a=b\cdotc+d\\(2)\quada\divb=c\cdotsd\\b>d\ge0\\(3)\quada,b,c=a/b,d=a\bmodb\\(4)\quad(a+b)\bmodc=[a\bmodc+b\bmodc]\bmodc\\a=x\cdot......