洛谷 - P2152 - SuperGCD - 高精度
https://www.luogu.org/problemnew/show/P2152
一开始不知道Java可以有gcd,手写了个辗转相除法。
发现Number类在参数传递中传的并非是引用!
最主要要解决的是MLE的问题,经查询得知System.gc()方法可以手动回收内存。
但是它慢得离谱!
我们考虑使用一个cnt计数器来平衡空间和时间的花费。经过试验cnt每800回收一次内存最终可以使花费内存到达32MB。
接近原本内存消耗的1/3!
至于为什么是模800……模200的时候TLE了,瞎蒙一个800。
估计是gcd的复杂度是对数级别的,那么模800大概会回收数十次内存。
这个实现太蠢了其实大数也有mod的……数学mod是mod,计算机%是remainder。减少了很多中间步骤使得时间和空间都有显著提升。
另外。其实也有pow和modPow,甚至有sqrt以及大素数素性测试!
import java.util.*;
import java.math.*; public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
BigInteger A=sc.nextBigInteger();
BigInteger B=sc.nextBigInteger();
sc.close();
System.gc(); BigInteger T1;
int cnt=0;
while(B.compareTo(BigInteger.ZERO)!=0) {
T1=B;
B=A.subtract(A.divide(B).multiply(B));
A=T1; cnt++;
if(cnt%800==0) {
T1=null;
System.gc();
}
}
T1=null;
B=null;
System.out.println(A);
}
}
而模600的话则接近TLE了。
估计模5000应该是比较好的平衡点?在有限的空间中尽可能缩短时间。空间消耗达到80MB,但是速度快至5秒!(模800是大约8秒)
最后,原来BigInteger有内置的gcd方法!
快至2秒,内存消耗17MB!
import java.util.*;
import java.math.*; public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
BigInteger A=sc.nextBigInteger();
BigInteger B=sc.nextBigInteger();
System.out.println(A.gcd(B));
sc.close();
}
}
洛谷 - P2152 - SuperGCD - 高精度的更多相关文章
- 【洛谷p2142】高精度减法
高精度减法第一遍没有过 高精度减法[传送门] 洛谷算法标签: 总之技术都在高精上了吧. 附代码: #include<iostream> #include<cstdio> #in ...
- 洛谷 P2152 [SDOI2009]SuperGCD (高精度)
这道题直接写了我两个多小时-- 主要是写高精度的时候还存在着一些小毛病,调了很久 在输入这一块卡了很久. 然后注意这里用while的形式写,不然会炸 最后即使我已经是用的万进制了,但是交上去还是有两个 ...
- 洛谷 P2152 [SDOI2009]SuperGCD
题意简述 求两个整数a,b的最大公约数0 < a , b ≤ 10 ^ 10000. 题解思路 如果 a % 2 == 0 && b % 2 == 0 gcd(a,b) = gc ...
- AC日记——阶乘之和 洛谷 P1009(高精度)
题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结 ...
- 洛谷试炼场-简单数学问题-P1045 麦森数-高精度快速幂
洛谷试炼场-简单数学问题 B--P1045 麦森数 Description 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果PP是个素数,2^P-1 不一定也是素数.到19 ...
- 【洛谷2624_BZOJ1005】[HNOI2008] 明明的烦恼(Prufer序列_高精度_组合数学)
题目: 洛谷2624 分析: 本文中所有的 "树" 都是带标号的. 介绍一种把树变成一个序列的工具:Prufer 序列. 对于一棵 \(n\) 个结点的树,每次选出一个叶子(度数为 ...
- 洛谷 P3182 [HAOI2016]放棋子(高精度,错排问题)
传送门 解题思路 不会错排问题的请移步——错排问题 && 洛谷 P1595 信封问题 这一道题其实就是求对于每一行的每一个棋子都放在没有障碍的地方的方案数. 因为障碍是每行.每列只有一 ...
- 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)
次元传送门::洛谷P1080 思路 我们模拟一下只有两个大臣的时候发现 当a1∗b1<a2∗b2是ans1<ans2 所以我们对所有大臣关于左右手之积进行排序 得到最多钱的大臣就是 ...
- NOIP2012 Day1 T2国王游戏 洛谷P1080
第一篇博客啊…… 由于我太弱了,还要去补不全的知识点准备参加人生第一次NOIp,所以第一篇博客就简短一点好了(偷懒就直说吧……) 洛谷P1080传送门 题意概括: 有N对数ai和bi,以及两个数a0和 ...
随机推荐
- python异常捕获异常堆栈输出
python异常捕获异常堆栈输出 学习了:https://blog.csdn.net/chris_grass/article/details/77927902 import traceback def ...
- Java安全之数字证书
在前面说到.消息摘要用于验证数据完整性,对称与非对称加密用于保证数据保密性,数据签名用于数据的抗否认性,于是集这些安全手段于一身的终极武器--数字证书出现了.数字证书具备了加密/解密的必要信息.包括签 ...
- 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(三)
通过组织结构能够对项目的岗位.部门.人员进行增删改操作. 加入新部门.并为新部门加入人员: 选中部门后,点击鼠标右键,能够选择加入平级部门或下属部门. 新建部门时,须要给部门设置部门编号.名称.与部门 ...
- OpenStack源码系列---起始篇
近一年来我负责公司云点的自动化部署工作,包括公司自有云平台方案.XenServer.vSphere.Ovirt和OpenStack的自动化安装部署,目前已经到了OpenStack这一部分.自动化部署首 ...
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part V
A Tutorial on the Device Tree (Zynq) -- Part V Application-specific data 之前提过,设备树中是一些特殊信息,这样一个驱动可以管理 ...
- Android实现RecyclerView的下拉刷新和上拉载入很多其它
需求 先上效果图, Material Design风格的下拉刷新和上拉载入很多其它. 源代码地址(欢迎star) https://github.com/studychen/SeeNewsV2 假设对于 ...
- AptitudeSystem 2.0
AptitudeSystem 2.0(2017-03-07) 描写叙述:Windows内核研究辅助工具 支持的系统:Windows 7.Windows 8.Windows 8.1.Windows 10 ...
- MapReduce算法形式六:只有Map独自作战
案例六:Map独自直接输出 之前一直没有用过这个map独自输出的模式,就算是输出一些简单的我也会经过一次reduce输出,但是,发现这个map输出的结果跟我预想的有点不一样,我一直以为shuffle的 ...
- ln mv 发挥一个物体的元作用
# tar xf ~/tools/mongodb-linux-x86_64-3.4.0.tgz -C /usr/local/; ln -sf /usr/local/mongodb-linux-x86_ ...
- Configuring Your EMS Server or EMS Console Server on Windows/Linux
EMS Configuration Files RAD Studio provides the scripts to render the web-browser console, the EMS s ...