题目描述
李老师的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
思路:
很明显是丑数,最直接的想法是数据除3,除5,除7到除尽为止,数据小的话没有问题,但是如果数据太大,运行就会超时,所以需要先找到小于等于x的所有丑数,再计算个数。找丑数可以用乘的方法来找。放个图解
这里我用不同的颜色表示除了三个指针的移动,为了避免填入数据的重复,写代码是用了if而不是else if,这也就使得如果最小值中出现了一样结果的时候两个指针均向后移动的结果
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
int main()
{
vector<long long> v = {1};
long long x;
cin >> x;
int a = 0, b = 0, c = 0;
while (1)
{
long long n3 = v[a] * 3;
long long n5 = v[b] * 5;
long long n7 = v[c] * 7;
long long Min = min(min(n3, n5), n7);
if (Min == n3)
a++;
if (Min == n5)
b++;
if (Min == n7)
c++;
if (Min > x)
break;
if(Min!=v.back())
v.push_back(Min);
}
cout << v.size() - 1 << endl;
return 0;
}