Number Theory 4.1 Divisibility

Number Theory 4.1 Divisibility

哈哈,第一篇,试写....

最熟悉的一个概念,最大公约数gcd,k/m 表示k能除尽m
注意“k能除尽m”和“m是k的倍数”并不完全一样,如k=0
gcd(m, n) = max{k| k/m and k/n}; ①
欧几里德算法的递归形式:
gcd(0, n) = n;
gcd(m, n) = gcd(n%m, m); m > 0 ②

还有一种扩展形式:
xm + yn = gcd(m, n);

这个x,y得出有个很美妙的递归求法。假定 n>m≥0,x1m + y1n = gcd(m, n);
1)当m=0时,x1=0,y1=1是它其中的一组可能解。
2)假设 r=n%m,则有 gcd(r, m) = x2r + y2m;
根据②可知 gcd(r, m) = gcd(m, n);
则有 x1m + y1n = x2r + y2m; ③
因为 r = n%m = n - [n/m]*m;
③可得 x1m + y1n = x2(n - [n/m]*m) + y2m = x2n + (y2 - [n/m]*x2)m;
则有解 y1 = x2;  x1 = y2 - [n/m]*x2;
可以看出x2, y2交叉赋值给y1, x1

这样就得到了扩展欧几里德算法。

//  extended_euclid(m, n) = mx + ny
int  extended_euclid( int  m,  int  n,  int   & x,  int   & y)
{
    
if(m == 0{
        x 
= 0;
        y 
= 1;
        
return n;
    }

    
int gcd = extended_euclid(n%m ,m ,y ,x);
    x 
-= n/* y;
    
return gcd;
}

 

还有个公式就是

∑am = ∑an/m (n > 0, m/n)

还不大清楚它的用途,下次碰到了再看下吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值