问题描述:

写一个程序来找第 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算法之超级丑数的更多相关文章

  1. Java实现 LeetCode 313 超级丑数

    313. 超级丑数 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7, ...

  2. [Swift]LeetCode313. 超级丑数 | Super Ugly Number

    Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all ...

  3. Ugly number丑数2,超级丑数

    [抄题]: [思维问题]: [一句话思路]:Long.valueOf(2)转换为long型再做 [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图 ...

  4. Leetcode 313.超级丑数

    超级丑数 编写一段程序来查找第n个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13,19] ...

  5. 313 Super Ugly Number 超级丑数

    编写一段程序来寻找第 n 个超级丑数.超级丑数是指其所有质因数都在长度为k的质数列表primes中的正整数.例如,[1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] ...

  6. [Leetcode] 第313题 超级丑数

    一.题目描述 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13, ...

  7. 超级丑数--用查找的api解决

    质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数:否则称为合数. 质因数(素因数或质因子)在数论里是指能整除给定正整数的质数.除了1以外,两个没有其他共同质因子的正 ...

  8. leetcode 264. 丑数 II 及 313. 超级丑数

    264. 丑数 II 题目描述 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, ...

  9. Leetocde的两道丑数题目:264. 丑数 II➕313. 超级丑数

    Q: A: 用变量记录已经✖2.✖3.✖5的元素下标i2.i3.i5.表示截止到i2的元素都已经乘过2(结果添加到序列尾部的意思),i3.i5同理.这样每次可以循环可以O(1)时间找到下一个最小的丑数 ...

随机推荐

  1. ValueError: setting an array element with a sequence.

    http://blog.csdn.net/pipisorry/article/details/48031035 From the code you showed us, the only thing ...

  2. H5学习之旅-H5的框架(13)

    H5框架语法介绍 :frame:框架对于页面的设计有很大的作用 frameSet:框架集标签定义如何将窗口分割为框架 ,每一个frameset定义一些列行或者列,rowS/COLS规定了每行或者每列占 ...

  3. 给Cocos2D视图添加手势支持

    见如下代码: UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc]initWithTarget:self ac ...

  4. 用javah 导出类的头文件, 常见的错误及正确的使用方法

    ******************************************************************************** 用javah 导出类的头文件, 常见的 ...

  5. 【翻译】Siesta事件记录器入门

    原文:Getting started with the Siesta event recorder 作者:Mats Bryntse 随着事件记录器功能的发布越来越近,我们准备了一下入门指南,向大家展示 ...

  6. Linux进程管理(第二版) --进程管理命令

    进程管理命令 一.查看用户信息.5.15 分钟内的系统的,优先值越小,优先权越大 ] 1.nice 指定程序运行的优先级 格式 nice -n command 例如 nice -5 myprogrem ...

  7. Erlang cowboy 入门参考

    Erlang cowboy 入门参考 cheungmine,2014-10-28 本文翻译自: http://ninenines.eu/docs/en/cowboy/HEAD/guide/gettin ...

  8. navicat里导入和导出.sql文件

    一:Navicat导入MySQL的.sql文件. 打开连接connection,选择你要导入的数据库,双击打开(或者新建一个),然后右键该数据库,选"运行批次任务文件(execute sql ...

  9. Dijkstra算法 c语言实现

    Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法能得出最短路径的最优 ...

  10. disable table 失败的处理

    相信每一个维护hbase集群的运维人员一定碰到过disable失败,陷入无穷的"Region has been PENDING_CLOSE for too long..."状态,此 ...