丑陋的数
简要说明:丑陋的数是质因子只有2或3或5的数,当然1也是。
要求:输出第1500个丑陋的数。
思路:从质因子入手。一个数可以分解成两种因子,质因子和非质因子。而非质因子会分解成质因子。所以一个数完全分解后只有质因子。所以丑陋的数的所有因子只有2、3或5。因而通过寻找2、3或5的这三个数之间的乘积来寻找丑陋的数。并且丑陋数的2、3或5的倍数还是丑陋数。
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int>s;
set<int>::iterator it;
s.insert(1);
for(it=s.begin();it=s.end()&&s.size()<1610;++it)
{
int n;
n=*it*2;
s.insert(n);
n=*it*3;
s.insert(n);
n=*it*5;
s.insert(n);
}
int a[1619],i=1;
for(it=s.begin();it!=s.end();it++,i++)
{
a[i]=*it;
}
cout<<a[1500];
}
分析:
for(it=s.begin();it=s.end()&&s.size()<1610;++it)
{
int n;
n=it2;
s.insert(n);
n=it3;
s.insert(n);
n=it5;
s.insert(n);
}
这是此代码的核心。运用set,在set中元素自动以小到大排列。set中第一个元素是1也是最小的丑陋的数。所以将1的2、3和5的倍数依次放入set,构成新的丑陋的数。按照上述规则循环set中的元素。