题目
李老师的lucky number 是3,5和7,他爱屋及乌,还把所有质因数只有3,5,7的数字认定为lucky number,比如9, 15, 21, 25等等。请聪明的你帮忙算一算小于等于x的lucky number有多少个?
输入数据
一个正整数x,3=<x<=1000000000000
输出数据
小于等于x的lucky number的个数。
样例输入
49
样例输出
11
样例说明
int存不下
思路
幸运数字可以表示成(
)
用枚举法,在数学上只需要三个for枚举i,j,k的值就可以了。
但是x可以取10^12,(虽然指数增长很快)但用pow有重复计算的顾虑,我想是不是可以用累乘循环。
代码分成三层循环,3、5、7各一层。
tmp3,tmp5,tmp7是记录每层循环初始值
tmp3:,
,
……
tmp5:,
,
……
tmp7:,
,
……
检验tmp7是否小于等于x,符合则计数器加一。
注意,要刨掉tmp7==1的情况(就是,根据题目可知
不能全为0)
代码
#include<iostream>
using namespace std;
int main()
{
long long int tmp3,x,count,tmp5,tmp7;
count=0;
tmp3=1;
cin>>x;
for(;tmp3<=x;tmp3*=3)
{
for(tmp5=tmp3;tmp5<=x;tmp5*=5)
{
for (tmp7=tmp5;tmp7<=x;tmp7*=7){
if(tmp7!=1) count++;
}
}
}
cout<<count<<endl;
return 0;
}