CINTA——6

CINTA——6

第一题

利用中国剩余定理,解法如下:

1、记 a = 8 , b = 3 , p = 11 , q = 19 , n = 11 ⋅ 19 = 209 ; a=8,b=3,p=11,q=19,n=11\cdot19=209; a=8,b=3,p=11,q=19,n=1119=209;

2、使用egcd算法求解 p − 1 p^{-1} p1 q − 1 q^{-1} q1,它们分别使 p p − 1 ≡ 1 ( m o d q ) pp^{-1}\equiv1\pmod q pp11(modq), q q − 1 ≡ 1 ( m o d p ) qq^{-1}\equiv 1\pmod p qq11(modp)。得到 p − 1 = 7 , q − 1 = 7 ( o r − 4 ) p^{-1}=7,q^{-1}=7(or-4) p1=7,q1=7(or4)
(注意:乘法逆元并不唯一,可以为正,也可以为负,不影响最后的求解结果)
但是在群里面,群元素的乘法逆元唯一
3、令 x = a q q − 1 + b p p − 1 ( m o d n ) x=aqq^{-1}+bpp^{-1}\pmod n x=aqq1+bpp1(modn),解得 x = 41 x=41 x=41
特别注意运算的最后不要忘记 ( m o d p q ) \pmod{pq} (modpq)
4、经验证可得: x x x是正解。

第二题

根据中国剩余定理的推广版:
其实,思路和正常的中国剩余定理是相同的,只不过乘法逆元求得是对剩下元素乘积的逆元 (其实也可以看作一个,最后总会算成一个来求解的),而不单单是一个元素了
存在 M = 5 ⋅ 7 ⋅ 9 ⋅ 11 M=5\cdot7\cdot9\cdot11 M=57911,使得方程组模 M M M有唯一解
x = ∑ i = 0 n a i b i b − 1 ( m o d M ) x=\sum_{i=0}^na_i b_i b^{-1}\pmod M x=i=0naibib1(modM)
其中, b i = M i / m i b_i=M_i/m_i bi=Mi/mi,且存在 b i − 1 b_i^{-1} bi1使得 b i b i − 1 ≡ 1 ( m o d m i ) b_ib_i^{-1}\equiv1\pmod {m_i} bibi11(modmi)

根据egcd算法可以求得 b i b_i bi的值


( 7 ∗ 9 ∗ 11 ) ⋅ b 1 − 1 ≡ 1 ( m o d 5 ) (7*9*11)\cdot b_1^{-1}\equiv 1\pmod 5 (7911)b111(mod5)

( 5 ∗ 9 ∗ 11 ) ⋅ b 2 − 1 ≡ 1 ( m o d 7 ) (5*9*11)\cdot b_2^{-1}\equiv 1\pmod 7 (5911)b211(mod7)

( 5 ∗ 7 ∗ 11 ) ⋅ b 3 − 1 ≡ 1 ( m o d 9 ) (5*7*11)\cdot b_3^{-1}\equiv 1\pmod 9 (5711)b311(mod9)

( 5 ∗ 7 ∗ 9 ) ⋅ b 4 − 1 ≡ 1 ( m o d 11 ) (5*7*9)\cdot b_4^{-1}\equiv 1\pmod {11} (579)b411(mod11)

得: b 1 − 1 = 2 b_1^{-1}=2 b11=2, b 2 − 1 = 3 b_2^{-1}=3 b21=3, b 3 − 1 = 4 b_3^{-1}=4 b31=4, b 4 − 1 = 8 b_4^{-1}=8 b41=8


x = 1 ∗ 7 ∗ 9 ∗ 11 ∗ 2 + 2 ∗ 5 ∗ 9 ∗ 11 ∗ 3 + 3 ∗ 5 ∗ 7 ∗ 11 ∗ 4 + 4 ∗ 5 ∗ 9 ∗ 7 ∗ 8 ( m o d 5 ∗ 7 ∗ 9 ∗ 11 ) x=1∗7∗9∗11∗2+2∗5∗9∗11∗3+3∗5∗7∗11∗4+4∗5∗9∗7∗8 \pmod {5*7*9*11} x=179112+259113+357114+45978(mod57911),得: x = 1731 x=1731 x=1731

第三题

本题考查代数版本下的中国剩余定理:其实用数论版本下的中国剩余定理也可以做,只不过用代数版本的话会简单许多

设 n = pq,p和g是两个互素的正整数。给定一个任意正整数x,它可以表达为一个唯一的序对: ( [ x ( m o d p ) ] , [ x ( m o d q ) ] ) ([x\pmod p], [x\pmod q]) ([x(modp)],[x(modq)])

221可以分为13*17,17与13互素,x即为2000,故 x ↔ ( 11 , 11 ) x\leftrightarrow(11,11) x(11,11),故 200 0 2019 ( m o d 221 ) ↔ ( 11 , 11 ) 2019 ( m o d 221 ) = ( [ 1 1 2019 ( m o d 13 ) ] , [ 1 1 2019 ( m o d 17 ) ] ) 2000^{2019}\pmod{221}\leftrightarrow(11,11)^{2019}\pmod{221}=([11^{2019}\pmod {13}],[11^{2019}\pmod {17}]) 20002019(mod221)(11,11)2019(mod221)=([112019(mod13)],[112019(mod17)])

再根据费尔马小定理,则上式等于 ( [ 1 1 168 ∗ ( 13 − 1 ) + 3 ( m o d 13 ) ] , [ 1 1 126 ∗ 16 + 3 ( m o d 17 ) ] ) = ( [ 1 1 3 ( m o d 13 ) ] , [ 1 1 3 ( m o d 17 ) ] ) = ( 5 , 5 ) ([11^{168*(13-1)+3}\pmod {13}],[11^{126*16+3}\pmod {17}])=([11^3\pmod {13}],[11^3\pmod {17}])=(5,5) ([11168(131)+3(mod13)],[1112616+3(mod17)])=([113(mod13)],[113(mod17)])=(5,5)

( 5 , 5 ) ↔ 5 (5,5)\leftrightarrow5 (5,5)5,故 200 0 2019 ( m o d 221 ) = 5 2000^{2019}\pmod{221}=5 20002019(mod221)=5

通过做题可以总结出一点规律:如果代数版本下的求解结果里面两个位置的数是完全相同的,那么最后的转换成一个数的结果就是这个数

第七题

from functools import reduce
#利用egcd算法求逆元
def egcd(a, b):
    if b == 0:
        return a, 1, 0
    else:
        g, x, y = egcd(b, a % b)
        return g, y, x - (a // b) * y
#中国剩余定理求唯一解
def CRT(n, a):
    sum = 0
    prod = reduce(lambda a, b: a*b, n)
#reduce函数用于计算列表n中所有元素的乘积。lambda a, b: a*b是一个匿名函数,它接受两个参数a和b,并返回它们的乘积。
    for n_i, a_i in zip(n, a):
        p = prod // n_i
        g, x, y = egcd(p, n_i)
        sum += a_i * y * p
    return sum % prod
#定义主函数
def main():
    n = [3, 5, 7]#3同余5mod7
    a = [2, 3, 2]#2同余3mod2
    result = CRT(n, a)
    print("同余方程的解为:", result)
if __name__ == "__main__":
    main()

### PyCharm 打开文件显示不全的解决方案 当遇到PyCharm打开文件显示不全的情况时,可以尝试以下几种方法来解决问题。 #### 方法一:清理缓存并重启IDE 有时IDE内部缓存可能导致文件加载异常。通过清除缓存再启动程序能够有效改善此状况。具体操作路径为`File -> Invalidate Caches / Restart...`,之后按照提示完成相应动作即可[^1]。 #### 方法二:调整编辑器字体设置 如果是因为字体原因造成的内容显示问题,则可以通过修改编辑区内的文字样式来进行修复。进入`Settings/Preferences | Editor | Font`选项卡内更改合适的字号大小以及启用抗锯齿功能等参数配置[^2]。 #### 方法三:检查项目结构配置 对于某些特定场景下的源码视图缺失现象,可能是由于当前工作空间未能正确识别全部模块所引起。此时应该核查Project Structure里的Content Roots设定项是否涵盖了整个工程根目录;必要时可手动添加遗漏部分,并保存变更生效[^3]。 ```python # 示例代码用于展示如何获取当前项目的根路径,在实际应用中可根据需求调用该函数辅助排查问题 import os def get_project_root(): current_file = os.path.abspath(__file__) project_dir = os.path.dirname(current_file) while not os.path.exists(os.path.join(project_dir, '.idea')): parent_dir = os.path.dirname(project_dir) if parent_dir == project_dir: break project_dir = parent_dir return project_dir print(f"Current Project Root Directory is {get_project_root()}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值