整除理论

社会主义新天地 提交于 2019-11-28 02:20:14

整除也是一片新天地呢qwq


 

整除的定义:设n为非负整数,d为正整数,如果n/d为整数。则称d整除n,记作d|n。

任何正整数都整除0。

 


约数:设n为非负整数,d为正整数,如果存在d|n,则称d为n的约数。

最大公约数(GCD):设a为正整数,b为正整数,a和b的所有约数中,相同且最大的那个称为a,b的最大公约数,

记作gcd(a,b)。

最大公约数的性质:gcd(a,0)=a; gcd(a,b)=gcd(b,a mod b); gcd(a,b)=gcd(b,a);

1,质因数分解求GCD

先将a和b质因数分解。

得到

a=∏Piai

b=∏Pibi

gcd(a,b)=∏Pimin(ai,bi)

2,辗转相除法求GCD

利用性质:gcd(a,b)=gcd(b,a%b); gcd(a,0)=a;

1 inline void gcd(int a,int b)
2 {
3     if(b==0) return a;
4     return gcd(b,a%b);
5 } 

若gcd(a,b)=1,则称a,b互质。

求n的正约数集合:试除法

求1-n每个数的正约数集合:倍数法,类似于埃氏筛不同的是不是只用质数筛,是用每个数都筛一遍。

 


 

倍数:若a,b为正整数,d为非负整数,若a|d,b|d,则称d为a,b的倍数。

最小公倍数(LCM):a,b的所有公倍数中最小的那个。

LCM(a,b)=a*b/gcd(a,b);

LCM(a,b)=a*gcd(a,b)/b;

 

 1 inline int gcd(int a,int b)
 2 {
 3     if(b==0) return a;
 4     return gcd(b,a%b);
 5 } 
 6 
 7 inline int lcm(int a,int b,int ans)
 8 {
 9     ans=(a/gcd(a,b))*b;
10     return ans;
11 }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!