0.題目
1.題解
1.1 DFS搜尋(失敗)
思路
思路很簡單,但是還有可能遇到重複的情況,比如像3->35->353 和 5->53->533 是重複的
但是遞迴過深,導致超時.
程式碼
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int ans = 0;
set<ll> s;
void DFS(ll num){
if(num > 3579152125273545) return;
s.insert(num);
DFS(num * 3);
DFS(num * 5);
DFS(num * 7);
}
int main(){
DFS(1);
for(auto num: s){
cout << num << endl;
}
cout << s.size() - 1;
}
1.2 暴力列舉
思路
這裡我們獲取相應的小於num的數的順序並不重要(因為我們只需要獲取總個數)
這裡其實就是 3^i * 5^j * 7^k 即為組成結構
但要注意,由於這裡包括了 i=0,j=0,k=0的情況,包含了1在裡面,需要減掉即可
程式碼
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll num = 59084709587505;
int ans = 0;
int main(){
for(int i = 0; pow(3, i) < num; i++){
for(int j = 0; pow(5, j) < num; j++){
if(pow(3, i) * pow(5, j) > num) break;
for(int k = 0; pow(7, k) < num; k++){
if(pow(3, i) * pow(5, j) * pow(7, k) <= num)
ans++;
else break;
}
}
}
cout << ans - 1;
return 0;
}