麦森数 大数加快速幂(Java版)

校赛的时候我们有这道题,那时候不会做,后来百度了题解,做的时候我直接用Java大数暴力,结果超时了,当时也想过用快速幂。。但是我不会用大数的快速幂,最后参考了别人的题解写的。
AC代码:

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int p=sc.nextInt();
		System.out.println((int)(p*Math.log10(2)+1));
		BigInteger w=new BigInteger("10");
		w=w.pow(500);
		BigInteger s=new BigInteger("1");
		BigInteger t=new BigInteger("2");
		while(p>0){
			if(p%2==1){
				s=s.mod(w);
				t=t.mod(w);
				s=s.multiply(t);
			}
			t=t.mod(w);
			t=t.multiply(t);
			p>>=1;
		}
		s=s.mod(w).subtract(BigInteger.valueOf(1));
		String str=s.toString();
		int len=str.length();
		for(int i=1;i<=500;i++){
			if(i+len<=500){
				System.out.print(0);
			}else{
				System.out.print(str.charAt(i-(500-len+1)));
			}
			if(i%50==0){
				System.out.println();
			}
		}
		sc.close();
	}
}

你可能感兴趣的:(蓝桥杯)