概述
BigInteger
int类型的最大值为 2 3 1 − 1 2^31-1 231−1,Java的long和C++的long long一样——最大值 2 6 3 − 1 2^63-1 263−1,如果要实现一个更大的数,C++需要字符串来存储数字的大数,但是实现过于麻烦,Java给我们封装实现了BigInteger(实现原理)
创建对象
常用构造方法:
BigInteger b=new BigInteger(String val);
静态初始化方法:
BigInteger b=BigInteger.valueOf(100);
读入BigInteger:
Scanner in=new Scanner(System.in);
BigInteger b=in.nextBigInteger();
运算
加减乘除
BigInteger a = new BigInteger("4");
BigInteger b = new BigInteger("2");
BigInteger c;
1. 加:
c=a.add(b); // 6
2. 减:
c=a.subtract(b); // 2
3. 乘:
c=a.multiply(b); // 8
4. 除
c=a.divide(b); // 2
取模、求幂、取绝对值、取相反数、求最大公因数
BigInteger a = new BigInteger("9");
BigInteger b = new BigInteger("-2");
BigInteger c;
1. 取相反数:
b=b.negate(); // 2
2. 取模:
c=a.mod(b); // 1 (或者使用a.reminder(b)求余,但注意:当a和b符号一致时,求模运算和求余运算所得的c的值一致。但当符号不一致时,结果不一样。求模运算结果的符号和b一致,求余运算结果的符号和a一致)
3. 取绝对值:
c=a.abs(); // 9
4. 求n次幂(只能传入int类型的数值)
int n=3;
c=a.pow(n); // 729
5. 求两个大数的最大公因数
BigInteger b1 = new BigInteger("36");
BigInteger b2 = new BigInteger("12");
b1=b1.gcd(b2); // 12
二进制运算
int n=1;
BigInteger a = new BigInteger("13");
BigInteger b = new BigInteger("2");
BigInteger c;
1. 与:
b=b.and(a); // 0
2. 或:
c=a.or(b); // 15
3. 异或:
c=a.xor(); // 15
4. 取反
c=a.not(); // -14
5. 左移n位
c=a.shiftLeft(n); // 26
6. 右移n位
c=a.shiftRight(n); // 6
三、比较
compareTo
compareTo(BigInteger val)返回一个int型数据:1—大于; 0—等于; -1—小于;
BigInteger a = new BigInteger("13");
BigInteger b = new BigInteger("2");
int num=a.compareTo(b); // 1
max、min
max(BigInteger val),min(BigInteger val):分别返回大的(小的)那个BigInteger数据;
BigInteger a = new BigInteger("13");
BigInteger b = new BigInteger("2");
BigInteger c = a.max(b); // 13
c=a.min(b); // 2
常量
ONE、TEN、ZERO:
BigInteger one = BigInteger.ONE;
BigInteger zero = BigInteger.ZERO;
BigInteger one = BigInteger.TEN;
类型转换
将BigInteger转换为基本数据类型
BigInteger b = BigInteger.valueof(25);
1. 转换为String
String string = b.toString(); //"25"
2. 转换为int
int num1=b.intValue(); // 25
3. 转换为long
long num2=b.longValue(); // 25
4. 转换为float
float num3=b.floatValue(); // 25.0
5. 转换为double
double num4=b.doubleValue(); // 25.0
重要方法
isProbablePrime(int certainty)
如果该 BigInteger 可能是素数,则返回 true ;如果它很明确是一个合数,则返回 false 。 参数 certainty 是对调用者愿意忍受的不确定性的度量:如果该数是素数的概率超过了 1 - 1/2*certainty方法,则该方法返回 true 。执行时间正比于参数确定性的值。
isProbablePrime函数是针对BigInteger类的一个素数判断函数,它的实现原理其实并不复杂,但是要求掌握的数论知识面挺广,要分许多情况讨论,要用到Miller-Rabin素数测试和Lucas-Lehmer测试,它是一个概率算法,返回的结果:一个数不是素数或者一个数可能是素数。
Scanner in = new Scanner(System.in);
BigInteger b;
b = in.nextBigInteger();
if(x.isProbablePrime(50)) //相当于该数是素数的概率超过99%
System.out.println("Yes");
else
System.out.println("No");
最后
以上就是义气滑板为你收集整理的Java大数——BigInteger的全部内容,希望文章能够帮你解决Java大数——BigInteger所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复