【问题标题】:Formula isn't Correctly Calculating公式计算不正确
【发布时间】:2015-09-13 04:57:39
【问题描述】:

我试图弄清楚为什么以下计算不正确

 x = Math.pow(w,e);

当我用 Java 计算时,我得到 1075,但我应该得到 779。

   int e = 17;
   int w = 803;
   int n = 2773;
   double x = 0;
        x = Math.pow(w,e) % n;
        System.out.println(x);

【问题讨论】:

  • 800^17 太大。考虑使用 BigInteger

标签: java equation modulo


【解决方案1】:

double 浮点数的精度为 53 位,不足以存储像 80317 这样巨大数字的精确值。要在 Java 中进行模幂运算,可以使用 BigIntegers 上的 modPow 方法。

【讨论】:

    【解决方案2】:

    由于 (803^17) 是一个非常大的数字,因此您必须对此处使用的变量使用 BigInteger 数据类型,而不是 int 或 double 数据类型。我们不能将整数或双精度变量转换为 BigInteger 变量。

    所以,程序将是:

    import java.math.BigInteger;
    
    public class JavaPow {
    
        public static void main(String[] args) 
        {
            BigInteger e = new BigInteger("17");
            BigInteger w = new BigInteger("803");
            BigInteger n = new BigInteger("2773");
            BigInteger x;
            x = w.modPow(e,n);
            System.out.println(x);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      相关资源
      最近更新 更多