我是靠谱客的博主 义气滑板,最近开发中收集的这篇文章主要介绍Java大数——BigInteger,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

BigInteger

int类型的最大值为 2 3 1 − 1 2^31-1 2311,Java的long和C++的long long一样——最大值 2 6 3 − 1 2^63-1 2631,如果要实现一个更大的数,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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部