1、问题描述
到x星球旅行的游客都被发给一个整数,作为游客编号。
x星的国王有个怪癖,他只喜欢数字3,5和7。
国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。
我们来看前10个幸运数字是:
3 5 7 9 15 21 25 27 35 45
因而第11个幸运数字是:49
小明领到了一个幸运数字 59084709587505,他去领奖的时候,人家要求他准确地说出这是第几个幸运数字,否则领不到奖品。
请你帮小明计算一下,59084709587505是第几个幸运数字。
需要提交的是一个整数,请不要填写任何多余内容。
2、我对这个问题的看法
这个问题可以用暴力枚举法(多重for循环)解决。题目中要求那个数的因子只能含有3、5、7,也就是说那个数是
这种形式的,所以可以用三层for循环来实现
这样的形式。
注:这个题目要注意到数的范围很大,故要用long long型。
3、解题代码
#include<iostream>
using namespace std;
int main()
{
int c=0;
long long n; //n很大,要用long long型;
cin>>n;
for(long long i=1;i<=n;i=3*i) //实现 3^i;
{
for(long long j=1;i*j<=n;j=5*j) //实现 3^i*5^j;
{
for(long long r=1;i*j*r<=n;r=7*r) //实现 3^i*5^j*7^r;
++c; //计算因子;
}
}
cout<<c-1; //去掉 i=j=r=1的情况;
return 0;
}
4、运行结果
输入数据:59084709587505
应输出:1905
运行环境:DEV c++
至此,整个题目解答完毕!!!
结语:以上就是我对这个问题的理解、解法,可能存在着更好、更简洁的解法代码,希望大家提出来,我们一起讨论,交换看法,共同进步。若上述代码中存在问题,望大家指正,谢谢大家看到结尾。(∩^∩)
奋斗的2351