HDU4392(反素数强大的模版)
题目: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(反素数强大的模版)相关推荐
- BZOJ 3085: 反质数加强版SAPGAP (反素数搜索)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3085 题意:求n(<=10^100)之内最大的反素数. 思路: 优化2: i ...
- HDU2521 反素数【因子数量+打表】
反素数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU 4228 Flooring Tiles 反素数的应用
给你一个数N,找出一个最小的可以拆分成N种乘积表达形式的数x 比如N=2,6可以拆成2x3或者1x6两种,但不是最小的,最小的是4可以拆成1x4,2x2两种 首先可以肯定的是x必然有N*2或者是N*2 ...
- 反素数(luogu 1463)
题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6 ...
- BZOJ(8) 1053: [HAOI2007]反素数ant
1053: [HAOI2007]反素数ant Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4118 Solved: 2453 [Submit][ ...
- Java黑皮书课后题第6章:**6.27(反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数。编写程序,显示前100个反素数,每行显示10个,并且数字间用空格隔开
6.27(反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数.编写程序,显示前100个反素数,每行显示10个,并且数字间用空格隔开 题目 题目描述 破题 代码 题目 题目描述 ...
- BZOJ 1053 [HAOI2007]反素数ant
53: [HAOI2007]反素数ant Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0< ...
- Number With The Given Amount Of Divisors(反素数)
Given the number n, find the smallest positive integer which has exactly n divisors. It is guarantee ...
- 【牛客 - 331G】炫酷数字(反素数打表 或 扩展埃式筛法,结论)
题干: 小希希望你构造一个最小的正整数,使得其有n个因子. 输入描述: 第一行一个整数T表示数据组数每组数据第一行输入一个正整数n,表示其因子数.n≤1,000,000n≤1,000,000T≤1,0 ...
最新文章
- Matlab2013a安装简单教程以及遇到的问题解决(反复提示激活问题)
- 编程语言python入门要电脑什么配置能带动-要学一门编程语言,那我一定选择Python!...
- 6大最流行、最有用的自然语言处理库对比
- opencv方框内图像保存_opencv利用矩形框选中某一区域并保存为新图片
- python企业微信回调_python 微信企业号-回调模式接收微信端客户端发送消息并被动返回消息...
- 2.6 MYSQL的输出格式
- c#中如何实现拷贝对象
- 大学计算机基础试题 选择题,大学计算机基础试题选择题
- create-react-app入门教程
- cgroups(7)— Linux中文手册页
- 看懂这些代码,我哭着笑了
- MVC源码解析 - UrlRoutingModule / 路由注册
- 我的世界如何安装java环境变量_JDK安装与环境变量配置方法
- python找电影资源_python一键电影搜索与下载
- android9 三星 港版,三星S10+官方港版安卓9完整固件升级更新包:TGY-G9750ZHU1ASF1
- centos-ssh-channel is not opened.
- vue利用【​v-viewer插件】实现单张图片以及多张图片的(触屏缩放和拖动)
- IFE_js_task03
- Backup Exec 2010安装指南
- SecureCRT Linux中文乱码问题