没有新消息
更多内容
0 条评论
暂无评论,快来写下您的评论
问题来自于
福大大
#福大大架构师每日一题#2023-12-02:用go语言,如何求模立方根? x^3=a mod p, p是大于等于3的大质数
2023-12-02:用go语言,如何求模立方根? x^3=a mod p, p是大于等于3的大质数, a是1到p-1范围的整数常数, x也是1到p-1范围的整数,求x。 p过大,x不能从1到p-1遍历。
2567
阅读
6
回答
@2024 职Q 智联招聘
合作商务邮箱:sbyh@zhaopin.com.cn
友情链接
HR圈内招聘/ 同道问答/ 人资知识社区
51社保/ X职场/ HR Bar/ 中人网/ 研招网
京ICP备17067871号 合字B2-20210134
京公网安备 11010502030147号
人力资源许可证:1101052003273号
网上有害信息举报专区
违法不良信息举报电话:400-885-9898
关爱未成年举报热线:400-885-9898-7
朝阳区人力资源与社会保障局 监督电话: 57596212,65090445
#福大大架构师每日一题#2023-12-02:用go语言,如何求模立方根? x^3=a mod p, p是大于等于3的大质数
package main import ( "fmt" "math/big" ) // 计算 x^3 ≡ a (mod p) 的解 func modCubicRoot(a, p *big.Int) *big.Int { // 检查p是否为3k+2形式 k := new(big.Int).Sub(p, big.NewInt(2)) k.Div(k, big.NewInt(3)) // 计算x = a^((2k+1)/3) mod p exponent := new(big.Int).Mul(k, big.NewInt(2)) exponent.Add(exponent, big.NewInt(1)) exponent.Div(exponent, big.NewInt(3)) return new(big.Int).Exp(a, exponent, p) } func main() { p := big.NewInt(11) // p需要是一个大质数 a := big.NewInt(5) // a是1到p-1范围的整数常数 x := modCubicRoot(a, p) fmt.Println("x:", x) }