找回密码
 欢迎注册
查看: 23|回复: 5

[擂台] 编译器有趣问题求解

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式

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

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

×
知乎中一个关于编译器的讨论
里面提及用程序验证\(a^3+b^3=c^3\)的无非零解问题。
题目里面写了一个无限循环,只在找到解时返回false,然后在循环外面返回true.
由于编译器优化时判断出循环不会退出,内部只有返回false,所以直接优化为返回false.

问题是题目里面使用了unsigned long long 类型,这个数据类型只有64比特,而穷举的a,b,c范围为1到\(10^9\), 实际上它们的三次方都超越了unsigned long long表达范围,
所以实际上相当于模\(2^{64}\)的计算,所以是有解的,由于穷举顺序实际相当于c最里层循环,b齐次,由于容易看出\(a=1,b=2^{22},c=1\)是一个平凡解,那么
实际上程序在经过最多\(10^9\times (2^{22}-1)+1\)次迭代后就会退出,因为它实际上求解的方程为
\(a^3+b^3 \equiv c^3 \pmod {2^{64}}, 1\le a,b,c\le 10^9\)

现在的问题是
i)这个程序最多经过多少次迭代会退出?
ii) a=c这种类型的解实际上还是一种平凡解,如何找出一个非平凡解?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2 小时前 | 显示全部楼层
这个涉及到 椭圆曲线在有限域内的解的情况

点评

另外 补码规则 也不符合 模运算规则  发表于 1 小时前
确实  发表于 1 小时前
模\(2^{64}\)不是有限域,有可能可以看成p-adic域上问题  发表于 2 小时前
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2025-11-26 13:28 , Processed in 0.026610 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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