`

求质因数只能是2,3,5,7的第n大个数(丑数求解)

阅读更多

题目:求质因数只能是2,3,5,7的第n大个数。例如:1,2,3,4,5,6,7,8,910,12,14,15,16,18

方法一:循环判断每一个数(自然数序列)是否符合丑数的定义,直至第n个数。还有一种思想就是分别求出2,3,5,7指数的范围,然后用多重循环产生每一个数,然后进行排序。

方法二:使用优先队列的方法:每次出最小的一个数,并将这个数分别乘以2,3,5,7的四个数入队,直到出了n个数为止。

方法三:使用四叉树,根节点是1,三个子节点是2,3,5,7,代表对应边的权值,每个子节点又有三个子节点2,3,5,7。如果用完全三叉树,会出现重复路径,比如1->3->2,和1->2->3,实际上是重复的,为了去除重复,对三叉树加上限制条件:2号节点后3个子节点(2,3,5);3号节点有2个子节点(3,5);5号节点有一个子节点(5)。这样就不会出先重复路径了。然后在用Dijkstra算法访问这棵四叉树,当访问完n个节点时就得到了最终结果。

方法四:每一个数都是前面某些数乘以2,3,5,7中最小的一个,用数组存储n个数,然后在用四个指针(数组小标)分别记录当前乘以2,3,5,7数(某些数)的位置,起始的时候指针值都为1,根据当前数的大小修改四个指针的大小,如当前数是20,那么2的指针一定是指向12,3的指针指向7,5的指针指向5,7的指针指向3,然后在利用四个指针计算下一个数,取12*2,7*3,5*5,3*7中最小的一个,最后在根据当前的数的大小,修改相应的指针(每次只需要增加一个指针就行了)。

1
1
分享到:
评论
1 楼 saieuler 2012-09-18  
写的挺详细

相关推荐

    C++中采用模版类求质数

    质数是大于1且只有两个正因数(1和自身)的自然数,例如2、3、5、7等。 首先,我们需要理解模板类的概念。模板类是一种泛型编程,它允许我们在编译时创建多个相关的类或函数,这些类或函数可以操作不同类型的数据。...

    Python实现简单求解给定整数的质因数算法示例

    例如,902的质因数有2、3、3和5,因为902 = 2 × 3 × 3 × 5。求解质因数的过程就是找到这些能够整除原始数的质数。 以下是一个简单的Python函数`get_num_factors`,用于计算并返回输入整数的质因数列表: ```...

    用汇编语言求1000以内的质数

    例如,2、3、5、7等都是质数。求解一定范围内的所有质数是一个经典的算法问题,通常可以通过筛选法(如埃拉托斯特尼筛法)来实现。 ### 汇编代码解析 #### 初始化部分 ```assembly mov si, offset da; 取首地址 ...

    用asp.net写的一段简单代码 求任意区间的素数

    素数是大于1且除了1和其自身外没有其他正因数的自然数,例如2, 3, 5, 7, 11等。求解素数的算法通常包括质因数分解或简单的遍历检查。 在ASP.NET中,我们可以使用C#或VB.NET作为后端编程语言来实现这个功能。以下是...

    Java实现求小于n的质数的3种方法

    代码中,我们遍历从2到n-1的每个整数i,然后再次内循环检查是否有其他数可以整除i。如果i能被2到i-1之间的任意数整除,那么它就不是质数。如果有且仅有一个数(即i自身)能整除i,那么i就是质数。这种方法的时间...

    c++程序 源代码.docx

    - 在多个题目中,如求多项式、求质数和、求奇数平方和等,都使用了`for`循环来遍历指定范围的整数。在C++中,`for`循环常用于迭代操作,可以精确控制循环次数。 - `while`循环也在求奇数平方和的题目中出现,用于...

    Java实现欧拉筛与花里胡哨求质数高级大法的对比

    总的来说,欧拉筛法是一种高效且实用的求质数算法,适合处理大范围内的质数计算。而“花里胡哨求质数高级大法”,虽然也是一种可行的方法,但在效率上不及欧拉筛,可能更适合小规模的数据处理或者作为教学示例。在...

    c语言求出给定范围内的所有质数

    例如,2、3、5、7、11等都是质数,而4、6、8等则不是,因为它们可以被除了1和自身以外的数整除。 在给出的程序中,有两个主要部分:`IsPrime`函数和`main`函数。 1. `IsPrime`函数: - 这个函数接收一个整数`x`...

Global site tag (gtag.js) - Google Analytics