丑陋的数

丑陋的数
简要说明:丑陋的数是质因子只有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中的元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值