几个特殊取模数的证明与16进制推广及应用

一、特殊整除数的证明

1.1 对3取模

定理一:一个整数如果能被3整除,则其各位数相加能被3整除。

证明:设整数N每个位上的数分别为an、an-1 ⋯ \cdots 、a1、a0,则
N = ∑ i = 0 n − 1 a i ∗ 1 0 i N = \sum_{i=0}^{n-1} a_i*10^i N=i=0n1ai10i 10 ≡ 1 ( m o d 3 ) 10 \equiv 1 (mod3) 101(mod3),则 1 0 i ≡ 1 ( m o d 3 ) 10^i\equiv1 (mod3) 10i1(mod3),故有
N ≡ ∑ i = 0 n − 1 a i ∗ 1 0 i ( m o d 3 ) = ∑ i = 0 n − 1 a i ( m o d 3 ) \begin{aligned}N &\equiv \sum_{i=0}^{n-1} a_i*10^i (mod3)\\&=\sum_{i=0}^{n-1}a_i(mod3)\end{aligned} Ni=0n1ai10i(mod3)=i=0n1ai(mod3)因而一个整数对3取模,结果即为其各位上的数之和对3取模。

1.2 被7整除

定理二:一个整数如果能被7整除,记其最高位到十位组成的数为a,个位数为b,则(a-2b)能被7整除。

例:对于861,百位和十位组成86,个位数是1, 86 − 2 ∗ 1 = 84 = 7 ∗ 12 86-2*1=84=7*12 8621=84=712

证明:设整数N最高位到十位组成的数为a,个位数为b,则 N = 10 ∗ a + b N=10*a+b N=10a+b,若N能被7整除,则
N ≡ 10 ∗ a + b ≡ 0 ( m o d 7 ) N\equiv10*a+b\equiv0\enspace(mod7) N10a+b0(mod7)即:
10 ∗ a ≡ − b ( m o d 7 ) 10*a\equiv -b\enspace(mod7) 10ab(mod7)
10 m o d 7 = 3 10mod7=3 10mod7=3,故 ( 10 ∗ a ) m o d 7 = ( 3 ∗ a ) m o d 7 (10*a)mod7=(3*a)mod7 (10a)mod7=(3a)mod7,则有
3 ∗ a ≡ − b ( m o d 7 ) 3*a\equiv -b\enspace(mod7) 3ab(mod7)两边乘5:
15 ∗ a ≡ − 5 b ( m o d 7 ) 15*a \equiv -5b \enspace (mod7) 15a5b(mod7) 15 m o d 7 = 1 15mod7 = 1 15mod7=1
a ≡ − 5 b ( m o d 7 ) a\equiv -5b\enspace(mod7) a5b(mod7)则可以得到
a − 2 b ≡ − 7 b ( m o d 7 ) ≡ 0 ( m o d 7 ) \begin{aligned}a-2b &\equiv -7b\enspace (mod7)\\&\equiv0\enspace(mod7)\end{aligned} a2b7b(mod7)0(mod7)命题得正。

二、16进制推广

2.1 对x取模

分析1.1中情况,可知3在十进制中取模特殊性来源于 1 0 n m o d 3 = 1 10^nmod3=1 10nmod3=1。因而在16进制中,对应的数x应满足
16 ≡ 1 ( m o d x ) , x ⩽ 16 16 \equiv 1(mod\enspace x), x\leqslant16 161(modx),x16易知 x x x的一个值是 x = 5 x=5 x=5
验证: ( 8 C 2 B ) 16 = ( 35883 ) 10 (8C2B)^{16}=(35883)^{10} (8C2B)16=(35883)10,8+C+2+B= ( 21 ) 16 = ( 33 ) 10 (21)^{16}=(33)^{10} (21)16=(33)10,二者对5取模均为3。
另外, x = 3 x=3 x=3 x = 15 x=15 x=15也满足该条件,这里不再讨论。

2.2 被x整除

分析1.2中情况,假设16进制中,一个整数N若能被b整除,设其最高位到次低位组成的数为x,则x-ay也能被b整除。
由此得出方程组:
{ m o d ( 16 , b ) = c m o d ( c ∗ k , b ) = 1 a + k = b \left\{\begin{aligned}&mod(16,b)=c\\&mod(c*k,b)=1\\&a+k=b\\\end{aligned}\right. mod(16,b)=cmod(ck,b)=1a+k=b
其中 a , b , c , k < 16 a,b,c,k < 16 a,b,c,k<16
直接遍历所有情况:

for b = 1:15
    c = mod(16,b);
    for k = 1:15
        if(mod(c*k,b)==1)
            for a = 1:15
                if(a+k==b)
                   fprintf("Number found:a=%d,b=%d,k=%d\r\n",a,b,k);
                end
            end
        end
    end
end

得到所有解:
在这里插入图片描述
验证(以a=2,b=11为例):
N = ( 65 F 7 ) 16 = ( 26013 ) 10 , 26103 = 11 ∗ 2373 N=(65F7)^{16}=(26013)^{10},26103=11*2373 N=(65F7)16=(26013)10,26103=112373 ( 65 F − 2 ∗ 7 ) 16 = ( 651 ) 16 (65F-2*7)^{16}=(651)^{16} (65F27)16=(651)16651是否被7整除不易直接得出,重复以上步骤
( 65 − 2 ∗ 1 ) 16 = ( 63 ) 16 = ( 99 ) 10 ≡ 0 ( m o d 11 ) (65-2*1)^{16}=(63)^{16}=(99)^{10}\equiv 0\enspace (mod11) (6521)16=(63)16=(99)100(mod11验证成功。其他解亦可,这里不一一验证。

2.3 特殊取模数的应用

  在剩余数系统(Residue Number System,RNS)中,使用一系列模数来表示一个较大的数(如用剩余数5,7,11将23表示为{3,2,1})。一个数进入剩余数系统进行计算时,需要求出其对特定剩余数的模。

  当输入数字的范围比较小时,可以直接用查找表的方法实现。当范围较大时,为提高效率,可以设置一系列特殊的剩余数,使得能够以较高的效率求出输入数字对这些剩余数的模。在FPGA中,基于16进制的运算环境下,在2.1中描述的条件下,3太小,5符合条件,15是5的整数倍(不满足剩余数互质的条件),因此较好的选择是5。

  在2.2中描述的条件下,由于只能验证剩余数的整数倍,不能直接求输入对其的模,因而要找到与输入最近的剩余数的倍数,从而求出输入对剩余数的模,具体思想如下(以 ( C 75 B ) 16 (C75B)^{16} (C75B)16对11取模为例):

  1. 要找到与 ( C 75 B ) 16 (C75B)^{16} (C75B)16最接近的11的倍数,可以先找出与 ( C 75 ) 16 (C75)^{16} (C75)16最接近的11的倍数,再调整最后一位,使其满足2.1所述条件。而找出与 ( C 75 ) 16 (C75)^{16} (C75)16最接近的11的倍数,又可以转化成找到与 ( C 7 ) 16 (C7)^{16} (C7)16最接近的11的倍数,由于两位数已经是一个可以接受的范围,直接将所有16进制两位数中11(B)的倍数存在查找表中。可知与 ( C 7 ) 16 (C7)^{16} (C7)16最接近的11的倍数是 ( C 6 ) 16 (C6)^{16} (C6)16
  2. ( C 6 ) 16 = ( C 7 − 1 ) 16 (C6)^{16}=(C7-1)^{16} (C6)16=(C71)16,将减数加减11使其转化为偶数,得到一个11的倍数: ( C 7 − 12 ) 16 (C7-12)^{16} (C712)16。而按2.1所述方法,要将 ( C 7 − 2 ∗ 5 ) 16 (C7-2*5)^{16} (C725)16调整到11的倍数 ( C 7 − 12 ) 16 (C7-12)^{16} (C712)16,需要将最低位5调整到6,因而 ( C 76 ) 16 (C76)^{16} (C76)16是11的倍数
  3. 重复以上步骤。 ( C 76 ) 16 = ( C 75 + 1 ) 16 (C76)^{16}=(C75+1)^{16} (C76)16=(C75+1)16是11的倍数,则 ( C 75 − 10 ) 16 (C75-10)^{16} (C7510)16是11的倍数,要将 ( C 75 − 2 ∗ B ) 16 (C75-2*B)^{16} (C752B)16转化为 ( C 75 − 10 ) 16 (C75-10)^{16} (C7510)16,需要将最低位B调整到5。因此得到 ( C 755 ) 16 (C755)^{16} (C755)16是最接近 ( C 75 B ) 16 (C75B)^{16} (C75B)16 的11的倍数。(这个说法不严谨, ( C 755 ) 16 (C755)^{16} (C755)16 ( C 75 B ) 16 (C75B)^{16} (C75B)16左边最大的11的倍数,可以用同样的方法求得 ( C 75 B ) 16 (C75B)^{16} (C75B)16右边最小的11的倍数,不过两个随便哪一个都可以得到 ( C 75 B ) 16 (C75B)^{16} (C75B)16对11的模)

  验证: ( C 755 ) 16 = ( 51029 ) 10 = ( 51029 ) 10 = 11 ∗ 4639 10 (C755)^{16}=(51029)^{10}=(51029)^{10}={11*4639}^{10} (C755)16=(51029)10=(51029)10=11463910,方法得证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值