找回密码
 欢迎注册
查看: 20248|回复: 7

[提问] 求离散对数,有什么好办法?

[复制链接]
发表于 2019-3-21 11:32:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
本帖最后由 mathematica 于 2019-3-21 11:33 编辑

我只知道mathematica的函数
MultiplicativeOrder[3, 10^20 + 39, 1111]

这个表示求x

\(3^x\equiv 1111 \pmod {10^{20}+39}\)

求解结果是

11 518195 851460 688003 + 100 000000 000000 000038k

这是用软件计算出来的,我就是想知道有没有好的快的办法计算出来
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-3-21 11:38:55 | 显示全部楼层
最近看数论高次剩余的内容,发现解方程其实就是先大整数分解,再求解离散对数,
不知道求离散对数有没有比较快的办法

点评

疑似挂掉了,计算./cado-nfs.py -dlp -ell 23 target=1111 1000000000000000000000000000057 -w /mnt/b,在CPU花了7小时之后仍然没有停止……  发表于 2019-3-22 23:47
cado-dlp,好像是这个名字吧,我不确定这玩意是否有BUG,反正现在还在瞎算  发表于 2019-3-22 23:00
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-3-23 08:28:26 | 显示全部楼层
mathematica 发表于 2019-3-21 11:38
最近看数论高次剩余的内容,发现解方程其实就是先大整数分解,再求解离散对数,
不知道求离散对数有没有比较 ...

23^x ≡ 1111 (mod 10^30+57)
x=20431396188147931063673575974
@.·.·.

点评

……我只是发现cado-nfs的dlp没有想象中的好用。毕竟cado-nfs分解因数是最快的,本以为它在dlp上也有很好的算法  发表于 2019-3-24 20:59
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-3-23 10:18:55 来自手机 | 显示全部楼层
离散对数难解是密码学的基础。如果离散对数计算容易,现在很多密码学方案都要推倒重来
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-1-12 11:17:15 | 显示全部楼层
本帖最后由 nyy 于 2024-1-12 12:51 编辑
mathematica 发表于 2019-3-23 08:28
23^x ≡ 1111 (mod 10^30+57)
x=20431396188147931063673575974
@.·.·.

  1.                   GP/PARI CALCULATOR Version 2.15.4 (released)
  2.           amd64 running mingw (x86-64/GMP-6.1.2 kernel) 64-bit version
  3.            compiled: Jun 28 2023, gcc version 10-posix 20210110 (GCC)
  4.                             threading engine: single
  5.                  (readline v8.0 enabled, extended help enabled)

  6.                      Copyright (C) 2000-2022 The PARI Group

  7. PARI/GP is free software, covered by the GNU General Public License, and comes
  8. WITHOUT ANY WARRANTY WHATSOEVER.

  9. Type ? for help, \q to quit.
  10. Type ?18 for how to get moral (and possibly technical) support.

  11. parisizemax = 1600000000, primelimit = 500000
  12. (11:12) gp > znlog(1111,Mod(3,10^20+39))
  13.   *** znlog: Warning: increasing stack size to 16000000.
  14. %1 = 11518195851460688003
  15. (11:12) gp > znlog(1111,Mod(23,10^30+57))
  16. %2 = 20431396188147931063673575974
复制代码


  1. parisizemax = 400000000, primelimit = 500000
  2. (12:44) gp > np=nextprime(10^40)
  3. %1 = 10000000000000000000000000000000000000121
  4. (12:44) gp > znlog(1111,znprimroot(np))
  5.   *** znlog: Warning: increasing stack size to 400000000.
  6. %2 = 350949205016697093673070464656598622956
  7. (12:47) gp > znprimroot(%1)
  8. %3 = Mod(6, 10000000000000000000000000000000000000121)
复制代码

这个计算用了三四分钟

上面的计算结果表明
\[6^{350949205016697093673070464656598622956}\equiv 1111 \pmod {10^{40}+121}\]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-25 13:54 , Processed in 0.065739 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表