码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-06-09 19:35:03      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:

英文描述: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的结果,以便以后使用。最小的数一旦使用后,立即出队。

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

标签:

原文地址:http://www.cnblogs.com/WonderHow/p/4564065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!