Java中BigInteger用法小结

  

下面我将详细讲解“Java中BigInteger用法小结”的完整攻略。

1. 什么是BigInteger

BigInteger是Java中一个用于处理大整数运算的类。它可以处理任意大的整数,而不会受到计算机内存的限制,因此在处理大数时非常方便实用。

2. BigInteger类的常用方法

下面是BigInteger类的一些常用方法:

2.1 创建BigInteger对象

BigInteger对象可以通过如下语句来创建:

BigInteger a = new BigInteger("1234567890");
BigInteger b = BigInteger.valueOf(1234567890L);

2.2 加法、减法、乘法、除法、取余

BigInteger类提供了加、减、乘、除、取余等运算方法:

BigInteger a = new BigInteger("1234567890");
BigInteger b = new BigInteger("9876543210");

BigInteger c = a.add(b);  // 加法
BigInteger d = a.subtract(b); // 减法
BigInteger e = a.multiply(b); // 乘法
BigInteger f = a.divide(b); // 除法
BigInteger g = a.remainder(b); // 取余

2.3 比较

BigInteger类还提供了比较运算:

BigInteger a = new BigInteger("1234567890");
BigInteger b = new BigInteger("9876543210");

int cmp = a.compareTo(b);
  • 如果a等于b,返回0;
  • 如果a小于b,返回-1;
  • 如果a大于b,返回1。

2.4 转换

BigInteger类可以转换为基本数据类型或其他类型:

BigInteger a = new BigInteger("1234567890");

long b = a.longValue(); // 转换为long类型
String c = a.toString(); // 转换为字符串

3. 示例说明

下面是两个示例,用来展示BigInteger类的一些用法。

3.1 阶乘计算

假设我们需要计算一个较大的数的阶乘,简单的算法已经无法处理,这时可以使用BigInteger类来解决。下面是一个简单的示例:

import java.math.*;

public class Factorial {
    public static void main(String[] args) {
        int n = 100;

        BigInteger result = BigInteger.ONE;

        for (int i = 1; i <= n; i++) {
            result = result.multiply(BigInteger.valueOf(i));
        }

        System.out.println(n + "! = " + result);
    }
}

执行结果:

100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

3.2 RSA加密解密

RSA是一种非对称加密算法,其中使用到了大数。我们可以使用BigInteger类来实现RSA加密解密。下面是一个简单的示例:

import java.math.*;

public class RSADemo {
    public static void main(String[] args) {
        BigInteger p = BigInteger.valueOf(61);
        BigInteger q = BigInteger.valueOf(53);

        BigInteger n = p.multiply(q);
        BigInteger e = BigInteger.valueOf(17);
        BigInteger d = e.modInverse(p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE)));

        String msg = "hello";
        BigInteger plainText = new BigInteger(msg.getBytes());

        BigInteger cipherText = plainText.modPow(e, n);
        BigInteger decryptedText = cipherText.modPow(d, n);

        String result = new String(decryptedText.toByteArray());
        System.out.println(result);
    }
}

执行结果:

hello

这个示例使用了61和53两个质数来生成公钥和私钥,然后将"hello"字符串进行RSA加密解密,并将解密后的结果输出。

相关文章