题目描述
李老师的lucky number 是3,5和7,他爱屋及乌,还把所有质因数只有3,5,7的数字认定为lucky number,比如9, 15, 21, 25等等。请聪明的你帮忙算一算小于等于x的lucky number有多少个?
输入数据
一个正整数x,3=
输出数据
小于等于x的lucky number的个数。
分析
//假设我们已经获得了一段lucky number序列
// 我们希望扩充这段序列,直到M达到给定的数值那么大
// 下一个lucky number一定是由当前序列中的某个数*3,*5或者*7得到的
// 我们把可能产生下一个lucky number的数字记为m3, m5和m7
// 序列中所有小于m3的数乘以3均不大于M, m3 * 3 > M
// 序列中所有小于m5的数乘以5均不大于M, m5 * 5 > M
// 序列中所有小于m7的数乘以7均不大于M, m7 * 7 > M
// 那么下一个lucky number将会是 min{m3*3, m5*5, m7*7},我们记作new_M
// new_M <= m3*3, new_M <= m5*5, new_M <= m7*7
// 如果new_M = m3*3,那么m3向后推一位,取序列中它的下一个数就可以了,m5和m7则不变
// 如果new_M = m5*5或者m7*7则同理
// M = 7, m3 = 3, m5 = 3, m7 = 3
// new_M = 9, new_m3 = 5, new_m5 = 3, new_m7 = 3
代码
vector<long long> ln(0x1000);
int m3 = 0, m5 = 0, m7 = 0, M = 2;
long long N3, N5, N7, new_ln;
new_ln = N3 < N5 ? N3 : N5;
new_ln = N7 < new_ln ? N7 : new_ln;