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


class Ugly {
  constructor(n, primes) {
    this.n = n
    this.primes = primes
  }
  getAll() {
    // 超级丑数列表
    let res = [1]
    let i = 2
    let primes = this.primes
    // 不知道上限用while循环
    while (res.length < this.n) {
      let arr = Ugly.getPrimies(i)
      let k = 0
      let l = arr.length
      for (; k < l; k++) {
        if (!primes.find(item => item === arr[k])) {
          break
        }
      }
      // k===l有两种情况,1.压根没有质因数,2.质因数都在指定列表中
      if (k === l) {
        if (l === 0) {
          if (primes.find(item => item === i)) {
            res.push(i)
          }
        } else {
          res.push(i)
        }
      }
      i++
    }
    // 返回丑数数组
    return res[this.n - 1]
  }
  // 计算指定正整数n的质因数
  static getPrimies(n) {
    let prime = (n) => {
      let arr = []
      for (let i = 2; i < n / 2 + 1; i++) {
        // 求质数利用递归,因为返回的是一个arr数组,当数组为空时说明是质数
        if (n % i === 0 && !prime(i).length) {
          arr.push(i)
        }
      }
      return arr
    }
    return prime(n)
  }
}

export default Ugly

原文地址:https://www.cnblogs.com/ygjzs/p/12236749.html

时间: 2024-08-28 15:32:18

超级丑数--用查找的api解决的相关文章

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] &l

丑数问题

只包含因子2,3,5的树称之为丑数  ,查找指定位置的丑数 package offer; public class choushu { public static boolean isugly(int num){ if(num<=0){ return false; } while(num%2==0){ num/=2; } while(num%3==0){ num/=3; } while(num%5==0){ num/=5; } if(num==1) return true; else retur

《剑指offer》---丑数

本文算法使用python3实现 1. 问题1 1.1 题目描述: ??把只包含因子2.3和5的数称作丑数(Ugly Number).判断一个数是否是丑数. ??时间限制:1s:空间限制:32768K 1.2 思路描述: ??大致思路:将该数依次除以 $ 2,3,5 $ ,若最后商为 $ 1 $ 则是丑数,否则,不是丑数. 1.3 程序代码: class Solution: def isUgly(self, num): '''判断num是否是丑数''' if num <= 0: return Fa

插入排序的优化【不靠谱地讲可以优化到O(nlogn)】 USACO 丑数

首先我们先介绍一下普通的插排,就是我们现在一般写的那种,效率是O(n^2)的. 普通的插排基于的思想就是找位置,然后插入进去,其他在它后面的元素全部后移,下面是普通插排的代码: 1 #include<iostream> 2 #include<fstream> 3 #include<stdio.h> 4 using namespace std; 5 int a[200000]; 6 int p[200000]; 7 8 int main(){ 9 ios::sync_wi

第 n 个丑数

自己想了两天都没思路啊啊啊啊啊我真是太笨了.看了他的 tag,说是用到了动态规划,于是特意看了算法导论里动态规划的部分.然而只是说了其思想,第一步构建合理的数据结构,第二部以递归的形式求解.可见水无常形,动态规划并不是单纯的公式就可以解决的.那么具体如何处理呢? 第一是,什么时候会用到动态规划,就是这样一种情况:后面的结果来自于前面的结果,而前面的结果又已经被求解后存储.前者意味着它的递归结构,后者有种空间换时间的意味. 明确这个就进入第二个问题,丑数是什么? 除了 1 之外,由且只由 2 3

华为机试—寻找丑数 &amp;&amp; 九度OJ 1214

题目1214:丑数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1733 解决:771 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输入包括一个整数N(1<=N<=1500). 输出: 可能有多组测试数据,对于每组数据, 输出第N个丑数. 样例输入: 3 样例输出: 3 #include<iostream> #in

codevs1246 丑数

题目描述 Description 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p1p2p3 (还有其它).这是个对于一个输入的S的丑数集合.注意:我们不认为1 是一个丑数.你的工作是对于输入的集合S去寻找集合中的第N个丑数.longint(signed 32-bit)对于程序是足够的. 输入描述 Input Description 第 1 行: 二个被空间分开的整数:K 和 N ,

Save Princess(丑数)

Save Princess 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 Yesterday, the princess was kidnapped by a devil. The prince has to rescue our pretty princess. "OK, if you want to save the beautiful princess, you must answer my questions correctly."the dev

hdu1058 Humble Numbers(丑数)

丑数:只包含一定的质因子的数称丑数,例如包含2,3,5.我们就把2,3,4,5,6,8,9,10,12,15........但我们通常把1称作为第一个丑数. 解题思路:我们现在做的这道题,就是以2,3,5,7为质因子,要我们求第n个丑数(以1为第一个丑数),可以采用DP的思想来解决.我们先以array[1]=1为基础,在它乘以质因子取得最小的数为有序数组的第二个,然后依次类推.写出状态转移方程:array[n] = Min(array[n2]*2, array[n3]*3, array[n5]*