java算法之超级丑数
问题描述:
写一个程序来找第 n 个超级丑数。
超级丑数的定义是正整数并且所有的质数因子都在所给定的一个大小为 k 的质数集合内。
比如给你 4 个质数的集合 [2, 7, 13, 19], 那么 [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] 是前 12 个超级丑数。
注意事项
1:永远都是超级丑数不管给的质数集合是什么。
2:给你的质数集合已经按照升序排列。
0 < k ≤ 100, 0 < n ≤ 10^6, 0 < primes[i] < 1000
样例 :给出 n = 6 和质数集合 [2, 7, 13, 19]。
第 6 个超级丑数为 13,所以返回 13 作为结果。
代码:
package 超级丑数;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println(3/2);
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
if(k<=0||k>100){
return;
}
int primes[] = new int[k];
for (int i = 0; i < primes.length; i++) {
primes[i] = sc.nextInt();
for (int j = 2; j < primes[i]/2+1; j++) {
if(primes[i]%j==0){
return;
}
}
}
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
for (int i = 2; i < Math.pow(10, 6); i++) {
if(isSuperUglyNumber(i,primes)){
list.add(i);
}
if(list.size()==n){
System.out.println(list.get(n-1));
break;
}
}
}
//递归思想判断是否为超级丑数
private static boolean isSuperUglyNumber(int i, int[] primes) {
if(i<primes[0])return false;
else{
for (int j = primes.length-1; j >= 0; j--) {
if(i==primes[j]){
return true;
}
else if(i>primes[j]&&i%primes[j]==0){
if(isSuperUglyNumber(i/primes[j],primes)){
return true;
}
}else{
continue;
}
}
return false;
}
}
//循环思想判断是否为超级丑数
public static boolean isSuperUglyNumber(int num ,int[] p){
for (int i = 0; i < p.length; i++) {
int j = 0;
while(true){
if(num % p[i] != 0 ){
break;
}else{
num = num/p[i];
continue;
}
}
if(num == 1){
return true;
}
}
return false;
}
}
采用了循环和递归两种思想,两个方法都可以正确判断到是否为满足条件超级丑数,这里就不放测试结果了,请自行测试
还有一些细节上的问题没有处理,不要在意这些哈。
转载请注明出处哦http://www.cnblogs.com/meng1314-shuai/p/7233403.html
java算法之超级丑数的更多相关文章
- Java实现 LeetCode 313 超级丑数
313. 超级丑数 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7, ...
- [Swift]LeetCode313. 超级丑数 | Super Ugly Number
Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all ...
- Ugly number丑数2,超级丑数
[抄题]: [思维问题]: [一句话思路]:Long.valueOf(2)转换为long型再做 [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图 ...
- Leetcode 313.超级丑数
超级丑数 编写一段程序来查找第n个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13,19] ...
- 313 Super Ugly Number 超级丑数
编写一段程序来寻找第 n 个超级丑数.超级丑数是指其所有质因数都在长度为k的质数列表primes中的正整数.例如,[1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] ...
- [Leetcode] 第313题 超级丑数
一.题目描述 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13, ...
- 超级丑数--用查找的api解决
质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数:否则称为合数. 质因数(素因数或质因子)在数论里是指能整除给定正整数的质数.除了1以外,两个没有其他共同质因子的正 ...
- leetcode 264. 丑数 II 及 313. 超级丑数
264. 丑数 II 题目描述 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, ...
- Leetocde的两道丑数题目:264. 丑数 II➕313. 超级丑数
Q: A: 用变量记录已经✖2.✖3.✖5的元素下标i2.i3.i5.表示截止到i2的元素都已经乘过2(结果添加到序列尾部的意思),i3.i5同理.这样每次可以循环可以O(1)时间找到下一个最小的丑数 ...
随机推荐
- ceres-solver库编译说明
0. ceres-solver简介 Ceres Solver是一个C++环境下的非线性最小二乘问题的求解工具包,可用来建模并解决大型复杂的非线性最小二乘问题.这个工具包已经广泛被 ...
- volley请求原理
Volley 实现原理解析 本文为 Android 开源项目实现原理解析 中 Volley 部分 项目地址:Volley,分析的版本:35ce778,Demo 地址:Volley Demo 分析者:g ...
- 【翻译】在Ext JS集成第三方库
原文地址:http://www.sencha.com/blog/integrating-ext-js-with-3rd-party-libraries/ 作者:Kevin Kazmierczak Ke ...
- Android虚拟机 USB转串口调试方法
有时候需要在虚拟机调试串口,首先安装串口的驱动程序(不知道的话可以用驱动精灵),然后打开设备管理器找到驱动,查看驱动使用的端口(比如COM3),虚拟机需要在命令行启动: 将SDK下的tools文件夹加 ...
- Testbench(转)
本来还打算自己写下对Testbench的理解,后来发现百度百科名片解释得很好,所以就直接转了. 原文百度百科链接:http://baike.baidu.com/link?url=dxzsOAs32IE ...
- JAVA中重写equals()方法的同时要重写hashcode()方法
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法 ...
- ROS探索总结(十四)——move_base(路径规划)
在上一篇的博客中,我们一起学习了ROS定位于导航的总体框架,这一篇我们主要研究其中最重要的move_base包. 在总体框架图中可以看到,move_base提供了ROS导航的配置.运行.交互接口,它主 ...
- 【38】java的集合框架(容器框架)
Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些 Collection允许相同的元 ...
- linux下64位汇编的系统调用(3)
背景知识基本交代清楚了,下面我们实际写一个小例子看一下.代码的功能很简单,显示一行文本,然后退出.我们使用了syscall中的write和exit调用,查一下前面的调用号和参数,我们初步总结如下: w ...
- Linux 系统应用编程——进程基础
一.Linux下多任务机制的介绍 Linux有一特性是多任务,多任务处理是指用户可以在同一时间内运行多个应用程序,每个正在执行的应用程序被称为一个任务. 多任务操作系统使用某种调度(shedule)策 ...