【问题标题】:Why is my modulo operator not working properly? [duplicate]为什么我的模运算符不能正常工作? [复制]
【发布时间】:2020-05-13 15:10:33
【问题描述】:

给定方程 y^2=x^3+2*x+4 mod 7 我想找到 x 和 y 在 0 到 6 范围内的所有可能解。我编写了以下程序:

for  (int y=0;y<7;y++)
{
  for  (int x=0;x<7;x++)
{

    if ((x^3+5*x+4)%7==(y^2)%7)
    {

        cout<<"("<<x<<","<<y<<")"<<endl;
    }
}  
}

但是,这个程序的输出是错误的。例如,程序打印出 (4,1),但这不满足方程。我该如何解决这个问题?

【问题讨论】:

  • 问题更可能是您使用了^ 运算符,即按位异或 运算符。
  • 顺便说一句,您问题中的方程式似乎与您代码中的方程式不同
  • 我很惊讶他们没有用常量警告xor-ing,这很可能表明其他语言的程序员......

标签: c++ algorithm modulo


【解决方案1】:

我认为问题在于x^3y^2不是幂运算,它确实是异或运算,所以,你可以使用x*x*xy*y来代替:

    for  (int y=0;y<7;y++)
    {
        for  (int x=0;x<7;x++)
        {

            if ((x*x*x+5*x+4)%7==(y*y)%7)
            {

                std::cout<<"("<<x<<","<<y<<")"<<std::endl;
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 2015-10-07
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2012-06-12
    • 2019-08-29
    相关资源
    最近更新 更多