ACM-数论-组合(暴力巧妙) 2018C/C++-A幸运数

题意:一些数字,只含有3,5,7的因子,形成一个数列:

3579,15,21,25,27,35,45,49,63,75,81,105,125....

然后给这些数字排序得到不同的次序,即:
num[1]=3
num[5]=15
num[11]=49
然后给你num[x]=59084709587505,求x是多少?

思路:这个还有个类似的情况是丑数(2,3,5)大家可以看看这个
其实数列就3,5,7这三个数字的组合,所以用set来维护整个数列的顺序,然后用前面的数字不断和3,5,7任一组合。具体。。看代码

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
int main(){
    ULL n=59084709587505,temp=1;
    ULL g=0;
    set<ULL>q; 
    q.insert((ULL)3);
    q.insert((ULL)5);
    q.insert((ULL)7);
    while(temp<n){
        temp=*q.begin();
        q.erase(q.begin());
        g++;
        q.insert(temp*3);
        q.insert(temp*5);
        q.insert(temp*7);
        //cout<<temp<<endl; //可以选择输出看看数列 
    }
    cout<<g<<endl;
    return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值