题目:Maximum Number Of Divisors


import java.io.BufferedInputStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Scanner; class Node
{ private static final int MAXP = 60; public BigInteger K; public long F; public int N; public int[] A; public Node() { K = BigInteger.ZERO; A = new int[MAXP]; }
} public class Main
{ private static final int MAXIP = 250; private static final int MAXP = 60; private static BigInteger[] prime; private static void init() { boolean[] isPrime = new boolean[MAXIP]; for(int i=0;i<MAXIP;++i) { isPrime[i] = true; } isPrime[0] = isPrime[1] = false; for(int i=4;i<MAXIP;i+=2) { isPrime[i] = false; } for(int i=3;i<MAXIP;i+=2) { for(int j=3;i*j<MAXIP;j+=2) { isPrime[i*j] = false; } } prime = new BigInteger[MAXP]; for(int i=0, j=0;i<MAXIP;++i) { if(isPrime[i]) { prime[j++] = BigInteger.valueOf(i); } } } public static void main(String args[]) { init(); List<BigInteger> P = new ArrayList<BigInteger>(); BigInteger MP = BigInteger.ZERO; List<Node> ans = new ArrayList<Node>(); Scanner cin = new Scanner(new BufferedInputStream(System.in)); while(cin.hasNext()) { BigInteger temp = cin.nextBigInteger(); P.add(temp); if(temp.compareTo(MP) == 1) { MP = temp; } ans.add(new Node()); } Map<Long, BigInteger> map = new HashMap<Long, BigInteger>(); Queue<Node> queue = new LinkedList<Node>(); Node origin = new Node(); origin.K = BigInteger.ONE; origin.F = 1; origin.N = 0; queue.add(origin); map.put(origin.F, origin.K); while(!queue.isEmpty()) { Node u = queue.peek(); queue.remove(); BigInteger compare = map.get(u.F); if(compare != null) { if(compare.compareTo(u.K) == -1) { continue; } } for(int i=0;i<P.size();++i) { if(u.K.compareTo(P.get(i)) <= 0) { if(u.F > ans.get(i).F) { ans.get(i).F = u.F; ans.get(i).K = u.K; } else if(u.F == ans.get(i).F) { if(u.K.compareTo(ans.get(i).K) == -1) { ans.get(i).K = u.K; } } } } for(int i=0;i<u.N;++i) { Node v = new Node(); v.K = u.K.multiply(prime[i]); if(v.K.compareTo(MP) <= 0) { v.F = u.F / (u.A[i] + 1) * (u.A[i] + 2); v.N = u.N; for(int j=0;j<u.N;++j) { v.A[j] = u.A[j]; } ++ v.A[i]; boolean flag = true; compare = map.get(v.F); if(compare != null) { if(compare.compareTo(v.K) <= 0) { flag = false; } else { map.remove(v.F); } } if(flag) { queue.add(v); map.put(v.F, v.K); } } } Node v = new Node(); v.K = u.K.multiply(prime[u.N]); if(v.K.compareTo(MP) <= 0) { v.F = u.F * 2; v.N = u.N + 1; for(int i=0;i<u.N;++i) { v.A[i] = u.A[i]; } ++ v.A[u.N]; boolean flag = true; compare = map.get(v.F); if(compare != null) { if(compare.compareTo(v.K) <= 0) { flag = false; } else { map.remove(v.F); } } if(flag) { queue.add(v); map.put(v.F, v.K); } } } for(int i=0;i<ans.size();++i) { System.out.println(ans.get(i).K.toString() + " " + ans.get(i).F); //第一个数为满足因子个数最多的K,第二个数为K的因子个数} }
}

HDU4392(反素数强大的模版)相关推荐

  1. BZOJ 3085: 反质数加强版SAPGAP (反素数搜索)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3085 题意:求n(<=10^100)之内最大的反素数. 思路: 优化2: i ...

  2. HDU2521 反素数【因子数量+打表】

    反素数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. HDU 4228 Flooring Tiles 反素数的应用

    给你一个数N,找出一个最小的可以拆分成N种乘积表达形式的数x 比如N=2,6可以拆成2x3或者1x6两种,但不是最小的,最小的是4可以拆成1x4,2x2两种 首先可以肯定的是x必然有N*2或者是N*2 ...

  4. 反素数(luogu 1463)

    题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6 ...

  5. BZOJ(8) 1053: [HAOI2007]反素数ant

    1053: [HAOI2007]反素数ant Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4118  Solved: 2453 [Submit][ ...

  6. Java黑皮书课后题第6章:**6.27(反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数。编写程序,显示前100个反素数,每行显示10个,并且数字间用空格隔开

    6.27(反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数.编写程序,显示前100个反素数,每行显示10个,并且数字间用空格隔开 题目 题目描述 破题 代码 题目 题目描述 ...

  7. BZOJ 1053 [HAOI2007]反素数ant

    53: [HAOI2007]反素数ant Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0< ...

  8. Number With The Given Amount Of Divisors(反素数)

    Given the number n, find the smallest positive integer which has exactly n divisors. It is guarantee ...

  9. 【牛客 - 331G】炫酷数字(反素数打表 或 扩展埃式筛法,结论)

    题干: 小希希望你构造一个最小的正整数,使得其有n个因子. 输入描述: 第一行一个整数T表示数据组数每组数据第一行输入一个正整数n,表示其因子数.n≤1,000,000n≤1,000,000T≤1,0 ...

最新文章

  1. Matlab2013a安装简单教程以及遇到的问题解决(反复提示激活问题)
  2. 编程语言python入门要电脑什么配置能带动-要学一门编程语言,那我一定选择Python!...
  3. 6大最流行、最有用的自然语言处理库对比
  4. opencv方框内图像保存_opencv利用矩形框选中某一区域并保存为新图片
  5. python企业微信回调_python 微信企业号-回调模式接收微信端客户端发送消息并被动返回消息...
  6. 2.6 MYSQL的输出格式
  7. c#中如何实现拷贝对象
  8. 大学计算机基础试题 选择题,大学计算机基础试题选择题
  9. create-react-app入门教程
  10. cgroups(7)— Linux中文手册页
  11. 看懂这些代码,我哭着笑了
  12. MVC源码解析 - UrlRoutingModule / 路由注册
  13. 我的世界如何安装java环境变量_JDK安装与环境变量配置方法
  14. python找电影资源_python一键电影搜索与下载
  15. android9 三星 港版,三星S10+官方港版安卓9完整固件升级更新包:TGY-G9750ZHU1ASF1
  16. centos-ssh-channel is not opened.
  17. vue利用【​v-viewer插件】实现单张图片以及多张图片的(触屏缩放和拖动)
  18. IFE_js_task03
  19. Backup Exec 2010安装指南
  20. SecureCRT Linux中文乱码问题

热门文章

  1. Nacos配置中心-如何使用Nacos作为配置中心统一管理配置
  2. 使用RSA算法生成令牌
  3. 多租户以及基于多租户的数据库设计需求
  4. 自定义工具类:工具类介绍
  5. 函数作为返回值练习 作用域和作用域链及预解析 闭包 闭包小案例
  6. activemq使用
  7. js 实现2的n次方计算函数_JS中数据结构与算法---排序算法
  8. 一段话系列-领域模型是什么?
  9. 短期目标[Till 2011-08-05]
  10. 新手学习Linux——rsync+shell脚本完成自动化备份