Live2D

整除理论

整除也是一片新天地呢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 }

 

posted @ 2019-08-21 05:11  Hoyoak  阅读(672)  评论(0编辑  收藏  举报