nyoj 数论 541最强DE 战斗力
2015-05-02 23:36
686 查看
踏实做事,安心做人,这是最后的斗争,英特纳雄奈尔一定会实现。
题目分析:这题是一个数论题,第一开始我自己找规律的时候,发现任何一个正整数分解的字数都能转为2和3的乘积。。。
后来就baidu了一下,有这么一定数论定理!
定理:当把一个正整数n拆分加数因子的乘积时,尽可能的拆为3,若最后剩1,就拿回一个3凑成4,这样就是最大的乘积。
知道里定理,用java用的大数,就OK啦
代码:
题目分析:这题是一个数论题,第一开始我自己找规律的时候,发现任何一个正整数分解的字数都能转为2和3的乘积。。。
后来就baidu了一下,有这么一定数论定理!
定理:当把一个正整数n拆分加数因子的乘积时,尽可能的拆为3,若最后剩1,就拿回一个3凑成4,这样就是最大的乘积。
知道里定理,用java用的大数,就OK啦
代码:
import java.io.BufferedInputStream; import java.io.PrintStream; import java.math.BigInteger; public class Main { static BufferedInputStream bis = new BufferedInputStream(System.in); static PrintStream out = System.out; static BigInteger bi3 = BigInteger.valueOf(3); public static void main(String[] args) throws Exception { int nCase; nCase = getInt(); while (nCase-- != 0) { getAns(getInt()); } out.close(); bis.close(); } static void getAns(int n) { int cntOf3 = 0, reminder; while (n - 3 >= 0) {//统计最多能拆分出多少个3 cntOf3++; n -= 3; } reminder = n; if (reminder == 0) { reminder++; } if (n == 1 && cntOf3 > 0) { cntOf3--; reminder = 4; } out.println(bi3.pow(cntOf3).multiply(BigInteger.valueOf(reminder))); } static int getInt() throws Exception { int i, temp = 0, mark = 1; while ((i = bis.read()) < 45) ; if (i == 45) { mark = -1; i = bis.read(); } while (i > 47) { temp = temp * 10 + i - 48; i = bis.read(); } return temp * mark; } }
相关文章推荐
- nyoj 541 最强DE 战斗力(数论)
- 【解题报告】 NYOJ 541 最强DE 战斗力 -- 数论
- 第五届河南省赛 zzulioj 1474: 最强DE战斗力 数论 nyoj 541
- NYOJ541 最强DE 战斗力 【数学】+【大数】
- NYOJ 541 最强DE 战斗力
- nyoj 最强DE 战斗力 (数论入门)
- [河南省ACM省赛-第五届] 最强DE 战斗力 (nyoj 541)
- NYOJ541 最强DE 战斗力(第五届省赛试题)
- NYOJ541 最强DE 战斗力(第五届省赛试题)
- NYOJ - 541 - 最强DE 战斗力 (第五届河南省程序设计大赛--大数!!)
- nyoj 541 最强DE 战斗力
- NYOJ 541 最强DE 战斗力(大数水)
- NYOJ 题目541 最强DE 战斗力(动态规划 大数,数学)
- NYOJ 541-最强DE 战斗力【大数,数的拆分问题】
- NYOJ541 最强DE 战斗力
- NYOJ541 最强DE 战斗力
- nyoj 541 最强DE 战斗力(大数问题)
- nyoj541 最强DE 战斗力 (大数问题)
- 541 最强DE 战斗力【数学和大数处理】
- 南阳理工OJ_题目541 最强DE 战斗力