题目链接:https://www.luogu.org/problemnew/show/P1045

题意:给定p(1000<p<3100000),求2^p-1的位数和最后500位(若不足高位补零)。

思路:首先,2^p-1和2^p有相同的位数,因为2^p末位一定不为0。所以2^p-1的位数为log10(2^p)+1,即p*log10(2)+1。

   手写快速幂计算2^p,并对Mod=10^500取模,计算结果减一之后注意判断是否为负,若为负,则加上模数,之后将BigInteger转字符串输出即可。

代码:

import java.io.*;
import java.math.*;
import java.util.*; public class Main {
public static BigInteger qpow(BigInteger a,int b,BigInteger Mod)
{
BigInteger ans = BigInteger.ONE;
while(b!=0)
{
if((b&1)==1)
ans = ans.multiply(a).mod(Mod);
a = a.multiply(a).mod(Mod);
b >>= 1;
}
return ans;
}
public static void main(String[] args)
{
Scanner cin = new Scanner(System.in);
BigInteger two = BigInteger.valueOf(2);
int p = cin.nextInt();
BigInteger Mod=BigInteger.TEN.pow(500);
BigInteger tmp = qpow(two,p,Mod);
tmp = tmp.subtract(BigInteger.ONE);
if(tmp.compareTo(BigInteger.ZERO)<0)
tmp.add(Mod);
String s=tmp.toString();
int len=s.length();
int cnt=0;
System.out.println((int)(p*Math.log10(2)+1));
for(int i=1;i<=500-len;++i){
System.out.print('0');
cnt++;
if(cnt==50){
cnt=0;
System.out.println();
}
}
for(int i=0;i<len;++i){
System.out.print(s.charAt(i));
cnt++;
if(cnt==50){
cnt=0;
System.out.println();
}
}
}
}

luoguP1045 (Java大数)的更多相关文章

  1. java大数

    java大数还是很好用的! 基本加入: import java.math.BigInteger; import jave.math.BigDecimal; 分别是大数和大浮点数. 首先读入可以用: S ...

  2. JAVA大数运算

    java大数是个好东西,用起来方便,代码短. 代码如下: import java.util.*; import java.math.*; public class Main { public stat ...

  3. java大数总结【转】

    java大数(2013长春网络赛)--hdu4762总结一下:1.java提交类要写Main.2.读取大数. Scanner read=new Scanner(System.in); BigInteg ...

  4. HDU5047Sawtooth(java大数)

    HDU5047Sawtooth(java大数) 题目链接 题目大意:在一个矩形内画n个"M".问如何画可以把这个矩形分成最多的区域. 给出这个区域的数目. 解题思路:最好的方式就是 ...

  5. JAVA大数类

    JAVA大数类api http://man.ddvip.com/program/java_api_zh/java/math/BigInteger.html#method_summary 不仅仅只能查J ...

  6. HDU4762(JAVA大数)

    Cut the Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  7. ZOJ3477&JAVA大数类

    转:http://blog.csdn.net/sunkun2013/article/details/11822927 import java.util.*; import java.math.BigI ...

  8. 多校第五场 归并排序+暴力矩阵乘+模拟+java大数&amp;记忆化递归

    HDU 4911 Inversion 考点:归并排序 思路:这题呀比赛的时候忘了知道能够用归并排序算出逆序数,可是忘了归并排序的实质了.然后不会做-- 由于看到题上说是相邻的两个数才干交换的时候.感觉 ...

  9. 收藏的一段关于java大数运算的代码

    收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...

  10. java大数判断相等

    java大数判断相等: 1.equals()方法2.compareTo()方法区别:2.00与2.0 equals()方法判断不等,compareTo()方法判断相等,科学的说法可以看java api ...

随机推荐

  1. call和ret指令

    call和ret都是用来修改ip或cs:ip,可以用来实现子程序的设计:   1.ret和retf ret    ->修改ip的内容,从而实现近转移: retf    ->同时修改cs和i ...

  2. 【Python之路】特别篇--RabbitMQ

    RabbitMQ 解释RabbitMQ,就不得不提到AMQP(Advanced Message Queuing Protocol)协议. AMQP协议是一种基于网络的消息传输协议,它能够在应用或组织之 ...

  3. TensorFlow使用记录 (九): 模型保存与恢复

    模型文件 tensorflow 训练保存的模型注意包含两个部分:网络结构和参数值. .meta .meta 文件以 “protocol buffer”格式保存了整个模型的结构图,模型上定义的操作等信息 ...

  4. 关于int main(int argc,char* argv[])详解

    平时在VS的环境下,主函数总会看到这两个参数,今天突然很想知道这两个参数的原理以及作用,因此查了下资料.真心受教了. 下面的博文是在百度空间看一位大神的,原文链接:http://hi.baidu.co ...

  5. 学习andriod开发之 异步加载图片(二)--- 使用其他进度条

    大家好 我是akira上一节 我们讲到使用AsyncTask 这个类进行异步的下载 主要是涉及到一些图片的更新 这次我们继续上一个demo的改进 . 不知道你是否发现一个问题 上一节我们遗留了两个bu ...

  6. jmeter操作登录等简单的使用

    一.登录 1.打开jmeter创建“线程组” 2.创建HTTP默认值 3.添加http默认值后,后边的http请求就可以省略填写部分内容 4.添加“HTTP信息管理头”在内添加名称:“Content- ...

  7. 「CSA Round #41」BFS-DFS

    题目链接 戳我 \(Description\) 给出一个图的\(bfs\)序和\(dfs\)序,构造出一个满足条件的图,边的扫描顺序为读入顺序 \(Solution\) 这个题还是很简单的. 先来看看 ...

  8. 已知源目录路径sourceFilePath,此目录下还有多级子目录和多个文本文件(*.txt)。尝试编写一个方法,将此目录下所有的文件拷贝至另一个目录targetFilePath,并其中的文本文件修改成SQL文件(*.SQL)。

    public void copyFile(String oldPath, String newPath) throws IOException { (new File(newPath)).mkdirs ...

  9. 使用root配置的hadoop启动时报错

    一.报错信息: Starting namenodes on [master]         ERROR: Attempting to operate on hdfs namenode as root ...

  10. 石川es6课程---8、字符串

    石川es6课程---8.字符串 一.总结 一句话总结: · es6字符串新增两个方法:startsWith(以什么开头),endsWith(以什么结尾) · 新增反单引号:可以解析变量,可以折行:le ...