1362: [蓝桥杯2018初赛]第几个幸运数(简单题)

这篇博客探讨了一种寻找只包含因子3,5,7的幸运数字的算法问题。作者首先尝试了直接循环判断的方法,但由于数据量过大导致运行缓慢。随后,作者改用pow()函数,通过三层循环分别计算3,5,7的幂次,巧妙地找到了小于给定数字的所有幸运数字的个数。这种方法显著提高了效率,成功解决了问题。
摘要由CSDN通过智能技术生成

传送门
到x星球旅行的游客都被发给一个整数,作为游客编号。
x星的国王有个怪癖,他只喜欢数字3,5和7。
国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。
前10个幸运数字是:3 5 7 9 15 21 25 27 35 45,因而第11个幸运数字是:49
小明领到了一个幸运数字 59084709587505。
去领奖的时候,人家要求他准确说出这是第几个幸运数字,否则领不到奖品。
请你帮小明计算一下,59084709587505是第几个幸运数字。
输出
输出一个整数表示答案
这题一开始思路有点问题,想着直接用循环判断从3~59084709587505……结果发现等待是漫长的……因为数据太大了它就是不出结果呀

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxx=0x3f3f3f3f;
const ll n=20210411;
const ll mod=1e9+7;
bool find(ll x){
	while(x!=1){
		if(x%3==0){
			x/=3;continue;	
		}else if(x%5==0){
			x/=5;continue;
		}else if(x%7==0){
			x/=7;continue;
		}else return 0;
	}
	return 1;
}
int main()
{
//    ios_base::sync_with_stdio(false);
	ll n=59084709587505,ans=0;
//	ll n=49,ans=0;
	for(ll i=3;i<=n;i+=2){
		if(find(i))ans++;
	}
	cout<<ans;
    return 0;
}

所以需要换一个思路,运用pow()函数三个循环将小于59084709587505的数都+1(因为循环得到的每个数均为有效的幸运数字)就可以得到结果啦~

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxx=0x3f3f3f3f;
const ll n=20210411;
const ll mod=1e9+7;
int main()
{
//    ios_base::sync_with_stdio(false);
	ll n=59084709587505,ans=0;
//	ll n=49,ans=0;
	for(int i=0;pow(3,i)<=n;i++){
		for(int j=0;pow(5,j)<=n;j++){
			for(int k=0;pow(7,k)<=n;k++){
				if(pow(3,i)*pow(5,j)*pow(7,k)<n)ans++;
			}
		}
	}
	cout<<ans;
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值