蓝桥杯vip答案java_Java实现 蓝桥杯VIP 算法训练 麦森数
算法訓練 麥森數
時間限制:1.0s 內存限制:256.0MB
問題描述
形如2P-1的素數稱為麥森數,這時P一定也是個素數。但反過來不一定,即如果P是個素數,2P-1不一定也是素數。到1998年底,人們已找到了37個麥森數。最大的一個是P=3021377,它有909526位。麥森數有許多重要應用,它與完全數密切相關。
任務:從文件中輸入P(1000
輸入格式
文件中只包含一個整數P(1000
輸出格式
第一行:十進制高精度數2P-1的位數。
第2-11行:十進制高精度數2P-1的最后500位數字。(每行輸出50位,共輸出10行,不足500位時高位補0)
不必驗證2P-1與P是否為素數。
樣例輸入
1279
樣例輸出
386
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000104079321946643990819252403273640855
38615262247266704805319112350403608059673360298012
23944173232418484242161395428100779138356624832346
49081399066056773207629241295093892203457731833496
61583550472959420547689811211693677147548478866962
50138443826029173234888531116082853841658502825560
46662248318909188018470682222031405210266984354887
32958028878050869736186900714720710555703168729087
import java.math.BigInteger;
import java.util.Scanner;
public class 麥森數 {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int p,len,i,cnt;
String s;
p=cin.nextInt();
BigInteger two,f,m;
two=BigInteger.ONE.add(BigInteger.ONE);
m=BigInteger.TEN.pow(500);
f=two.modPow(BigInteger.valueOf(p), m);
f=f.subtract(BigInteger.ONE);
if(f.compareTo(BigInteger.ZERO)<0)
f=f.add(m);
s=f.toString();
len=s.length();
cnt=0;
System.out.println((int)(Math.floor(p*Math.log10(2))+1));
for(i=1;i<=500-len;i++)
{
System.out.print('0');
cnt++;
if(cnt==50)
{
cnt=0;
System.out.println();;
}
}
for(i=0;i
{
System.out.print(s.charAt(i));
cnt++;
if(cnt==50)
{
cnt=0;
System.out.println();
}
}
}
}
總結
以上是生活随笔為你收集整理的蓝桥杯vip答案java_Java实现 蓝桥杯VIP 算法训练 麦森数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git常规命令大全
- 下一篇: Ansible无敌详细入门教程