计算第k个质因数只能为3,5,7的数

英文描述:Design an algorithm to find the kth number such that the only prime factors are 3, 5, and 7


思路:质因数只能为3,5,7,设这个数为val,则val = (3^i)(5^j)(7^n) (i,j,n>=0),显然第1个数为1,第2个为1*3,第3个为1*5,第4个为1*7,第5个为3*3,第6个为3*5,第7个为3*7...

如果将钱k-1个数组成一个链表r,可以看出,第k个数为3或5或7乘以前k-1个数中的某一个,得到一个还未加入r的最小的数。为了防止过多的循环,我们应对这个最小的数保持记录。

代码:

 1 #include<queue>
 2
 3 int findnum(int k)
 4 {
 5     if (k <= 0)
 6         return 0;
 7     int val =1;
 8     queue<int> Q3; Q3.push(3);
 9     queue<int> Q5; Q5.push(5);
10     queue<int> Q7; Q7.push(7);
11
12     for (k--; k > 0; k--)
13     {
14         val = findmin(Q3.front(), Q5.front(), Q7.front());
15         if (val == Q7.front())
16             Q7.pop();
17         else
18         {
19             if (val == Q5.front())
20                 Q5.pop();
21             else
22             {
23                 Q3.pop();
24                 Q3.push(val * 3);
25             }
26             Q5.push(val * 5);
27         }
28         Q7.push(val*7);
29     }
30
31     return val;
32 }
33 int findmin(int a, int b, int c)
34 {
35     int result = 0;
36     if (a < b)
37         result = a;
38     else result = b;
39     if (result > c)
40         result = c;
41     return result;
42 }

我使用了C++ STL模板queue(队列,先入先出),Q3,Q5,Q7分别用来记录上一次最小的数乘以3,5,7的结果,以便以后使用。最小的数一旦使用后,立即出队。

时间: 2024-08-30 08:13:56

计算第k个质因数只能为3,5,7的数的相关文章

计算纬度、经度距离,返回公里(千米)数

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ClDing.Utility{ /// <summary> /// 计算纬度.经度距离 /// </summary> public class Distance { private const double EARTH_RADIUS = 63

2019年优选大数据计算平台搭建方案之BR-odp数据安全、管理模块,数道云大数据

[前言]大数据计算平台,使用了Hadoop.Spark.Storm.Flink等这些分布式的实时或者离线计算框架,建立计算集群,并在上面运行各种计算任务. 21世纪的现在,大数据这个名词对我们来说并不陌生,大数据受到了不同行业,不同领域的各界人士的关注,就在今年已经过去的两会中,大数据的发展及使用也成为两会的热门话题. 大数据行业火热的发展,大数据技术将海量数据的价值化来赋予传统行业不一样的发展前景,大数据不仅助力企业的发展,同时也在政府等关于民意收集等等多个领域得到广泛应用,因此,大数据技术在

计算一个项目工程中所有包下面的代码行数

有时我们在做项目归档的时候难免会遇到,进行统计代码的行数,这时我们可以用一段代码,直接统计出来. 下面我给出一段统计一个java工程下代码的行数的实例代码: import java.io.File; import jodd.io.FileUtil; public class Test { public static void main(String[] args) throws Exception { File root = new File("E:/MyEclipse 9/"); s

卡尔曼滤波

过程方程: X(k+1) =  A X(k) + B U(k) + W(k)               >>>>式1 测量测方程: Z(k+1) =  H X(k+1)+ V(k+1)                  >>>>式2 A和B是系统参数,对于多模型系统,他们为矩阵:H是测量系统的参数,对于多测量系统,H为矩阵.W(k)和V(k)分别表示过程和测量的噪声.他们被假设成高斯白噪声,他们的协方差 分别是Q,R.为了不失一般性,下面的讨论中将X,Z都

[CF403D]Beautiful Pairs of Numbers

题意:给定$n,k$,对于整数对序列$\left(a_1,b_1\right),\cdots,\left(a_k,b_k\right)$,如果$1\leq a_1\leq b_1\lt a_2\leq b_2\lt\cdots\lt a_k\leq b_k\leq n$且所有的$b_i-a_i$互不相同,则称这个序列是“美丽的”,求美丽的序列的个数 先转化一下,把每个数对$\left(a_i,b_i\right)$看作一个区间$\left[a_i,b_i\right]$,则题目要求的是$k$个长

bzoj5093:图的价值(第二类斯特林数+NTT)

传送门 首先,题目所求为\[n\times 2^{C_{n-1}^2}\sum_{i=0}^{n-1}C_{n-1}^ii^k\] 即对于每个点\(i\),枚举它的度数,然后计算方案.因为有\(n\)个点,且关于某个点连边的时候剩下的边都可以随便连,所以有前面的两个常数 所以真正要计算的是\[\sum_{i=0}^{n-1}C_{n-1}^ii^k\] 根据第二类斯特林数的性质,有\[i^k=\sum_{j=0}^iS(k,j)\times j!\times C_i^j\] 然后带入,得\[\s

【BZOJ2227】【ZJOI2011】看电影 [组合数学][质因数分解]

看电影 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 到了难得的假期,小白班上组织大家去看电影.但由于假期里看电影的人太多,很难做到让全班看上同一场电影,最后大家在一个偏僻的小胡同里找到了一家电影院.但这家电影院分配座位的方式很特殊,具体方式如下: 1. 电影院的座位共有K个,并被标号为1…K,每个人买完票后会被随机指定一个座位,具体来说是从1…K中等可能的随机选取一个正整数,设其为L.

POJ 2773 Happy 2006 (分解质因数+容斥+二分 或 欧几里德算法应用)

Happy 2006 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10309   Accepted: 3566 Description Two positive integers are said to be relatively prime to each other if the Great Common Divisor (GCD) is 1. For instance, 1, 3, 5, 7, 9...are a

数论 - Miller_Rabin素数测试 + pollard_rho算法分解质因数 ---- poj 1811 : Prime Test

Prime Test Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 29046   Accepted: 7342 Case Time Limit: 4000MS Description Given a big integer number, you are required to find out whether it's a prime number. Input The first line contains the