梅森素数

梅森素数

题干

在这里插入图片描述

代码

package aJAVA13;
/*
 *   2^11213 - 1 这个数字已经很大(有3000多位),
 *   请你编程求出这个素数的十进制表示的最后100位。
 * */
import java.math.BigInteger;

public class _03梅森素数 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigInteger x = BigInteger.valueOf(2).pow(11213).subtract(BigInteger.ONE);
		String s = x.toString();
		int length = s.length();
		String ans = s.substring(length-100);
		System.out.println(ans.length()+ " "+ans);

	}

}

总结:

1.BigInteger(理解)
介绍
不可变的任意精度的整数。数据的范围超过了long类型后,可以使用BigInteger类实现,该类的计算整数是不限制长度的。
该类内部提供了加减乘除的方法

构造方法
public BigInteger (String num);

成员方法
BigInteger 类型的数据不能直接使用 +/-/* 操作, 需要通过内部提供的方法

每一个大整数都需要new 一个BigInteger对象, 赋值给对象变量,用传参方法来进行计算

image-20210310104811642

BigInteger 可以用来解决数据的溢出问题。

BigInteger的常用用法:

1。probablePrime和nextprobablePrime。(判断质数,并返回)

  BigInteger.probablePrime(int x);

  返回有可能是素数(质数),具有指定长度的正数BigInteger,返回可能是合数的概率不超过2的负100次方, 

  BigInteger.nextprobablePrime(int x)

  返回大于此BigInteger的有可能是素数(质数),具有指定长度的正数BigInteger,返回可能是合数的概率不超过2的负100次方,

 2.valueOf()(对数据初始化)

BigInteger valueOf(long val)

用法如下:

img

3四则运算(add(加)。subtract(减)。multiply(乘)。divide(除))

  调用方式如上图,可以重复调用

4remainder(取余)

返回其值为取余后的BigInteger类型的值,例子如下img

调用的时候要保证数据是BigInteger类型的,可以用初始化(valueOf)或者new一个。

5.divideAndRemainder(先除后取余,结果分别存在数组中)img

2.BigDecimal类

介绍
计算机在计算小数时, 使用 + / - /* 的操作, 其精度有问题
对于小数的运算,我们需要使用 BigDecimal类类型

概述
此类是做高精度的浮点数运算的

构造方法

img

常用方法

image-20210310104932190

注意
如果除不尽, 会抛出异常java.lang.ArithmeticException异常
可以使用
divide方法的另一个重载方法;
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode): divisor:除数对应的BigDecimal对象; 参数说明:scale:精确的位数;roundingMode取舍模式
取舍模式四舍五入可以输入 RoundingMode.HALF_UP

length()是最大的下标+1

想要最后一百个就是length-100

image-20210310105704285

4.做题技巧

不确定是不是一百位,可以输出一下长度

System.out.println(ans.length()+ " "+ans);

posted @ 2021-03-10 11:07  记录学习Blog  阅读(590)  评论(0编辑  收藏  举报