luoguP1045 (Java大数)
题目链接: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大数)的更多相关文章
- java大数
java大数还是很好用的! 基本加入: import java.math.BigInteger; import jave.math.BigDecimal; 分别是大数和大浮点数. 首先读入可以用: S ...
- JAVA大数运算
java大数是个好东西,用起来方便,代码短. 代码如下: import java.util.*; import java.math.*; public class Main { public stat ...
- java大数总结【转】
java大数(2013长春网络赛)--hdu4762总结一下:1.java提交类要写Main.2.读取大数. Scanner read=new Scanner(System.in); BigInteg ...
- HDU5047Sawtooth(java大数)
HDU5047Sawtooth(java大数) 题目链接 题目大意:在一个矩形内画n个"M".问如何画可以把这个矩形分成最多的区域. 给出这个区域的数目. 解题思路:最好的方式就是 ...
- JAVA大数类
JAVA大数类api http://man.ddvip.com/program/java_api_zh/java/math/BigInteger.html#method_summary 不仅仅只能查J ...
- HDU4762(JAVA大数)
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- ZOJ3477&JAVA大数类
转:http://blog.csdn.net/sunkun2013/article/details/11822927 import java.util.*; import java.math.BigI ...
- 多校第五场 归并排序+暴力矩阵乘+模拟+java大数&记忆化递归
HDU 4911 Inversion 考点:归并排序 思路:这题呀比赛的时候忘了知道能够用归并排序算出逆序数,可是忘了归并排序的实质了.然后不会做-- 由于看到题上说是相邻的两个数才干交换的时候.感觉 ...
- 收藏的一段关于java大数运算的代码
收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...
- java大数判断相等
java大数判断相等: 1.equals()方法2.compareTo()方法区别:2.00与2.0 equals()方法判断不等,compareTo()方法判断相等,科学的说法可以看java api ...
随机推荐
- JVM(五),ClassLoader
五.ClassLoader 1.什么是ClassLoader 2.四种ClassLoader 3.自定义CLassLoader (1)MyClassLoader public class MyClas ...
- BZOJ 3667: Rabin-Miller算法 (Pollard-Rho 模板)
说实话,我知道每一步都干啥,但我完全不知道为啥这么做,也不知道为什么是正确的,反正会用就行了~ #include <cmath> #include <cstdio> #incl ...
- flask框架(三):flask配置文件
flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为: { 'DEBUG': get_debug_flag(default=False), 是否开启Debug ...
- 用bootstrap写一个登陆页
<div class="container"> <p class="text-center marginTop35">后台管理系统< ...
- jmeter下载安装
jmeter运行依靠java环境 一.根据jmeter版本不同要求java环境则不同 jmeter官网下载地址:http://jmeter.apache.org/download_jmeter.cgi ...
- kentico中page alias的使用
这里设置的path or pattern,是针对于根目录而言的
- linux系统空间不足,lsof看到异常的delete状态的文件。
#20191101更新---这篇文章适用于产生僵尸文件的进程是可kill的状态参考,就是这个进程死亡不影响业务,那么另外一种情况,也是我现在管理的项目中生产环境中出现过的情况,产生僵尸文件的进程是we ...
- SSL及TLS
SSL SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议. ...
- Jmeter实现简单web负载测试
Jmeter实现简单web负载测试 简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. ...
- Jmeter接口测试图文示例
Jmeter接口测试图文示例 以getObjectByCode接口为例,用jmeter2.13来进行接口测试. 测试前准备: 测试工具及版本:jmeter 2.13 r1665067(须包含__MD5 ...