丑数

试题描述
  丑数就是这个数的质因子只有2,3,5,7这四个,除此之外不再含有其它别的质因子。注意1也被认为是丑数.丑数的前20个为1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, ...
( 1 <= n <= 1500)
输入格式
  一个整数n。
输出格式
  第n个丑数
输入示例
1000
输出示例
  385875

 

解法1:

直接构造。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int h[1505];
 4 int main(){
 5     int n,a=1,b=1,c=1,d=1;
 6     cin>>n;
 7     h[1]=1;
 8     for(int i=2;i<=n;i++){
 9         int t=min(min(h[a]*2,h<b>*3),min(h[c]*5,h[d]*7));
10         h[i]=t;
11         if(t==h[a]*2) a++;
12         if(t==h<b>*3) b++;
13         if(t==h[c]*5) c++;
14         if(t==h[d]*7) d++;
15     }
16     cout<<h[n];
17 }

 

解法2:

set

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 set<int> s;
 4 int main(){
 5      int n;
 6      cin>>n;
 7      s.insert(1);
 8      set<int>::iterator it;
 9      it=s.begin();
10      for(int i=1;i<n;i++){
11          int t=*it;
12          s.insert(t*2);
13          s.insert(t*3);
14          s.insert(t*5);
15          s.insert(t*7);
16          it++;
17      }
18      cout<<*it;

 

posted @ 2020-11-16 20:25  j~~~~~  阅读(105)  评论(0)    收藏  举报