-
题意:
-
特殊数字”是指只能被分解为2,3,7的乘积的数字。“特殊数字”序列为1, 2, 3, 4, 6, 7, 8, 9, 12, 14, ...展示了前10个“特殊数字”。按照惯例,1也是“特殊数字”。给定整数n,写一个程序,找到序列中,第n个“特殊数字”。如:n=9,找到“特殊数字”序列中第9位数字,也就是输出12。
输入:
每一行包含一个正整数,n (n <= 1500)。如果输入的一行为0,则输入终止。
输出:
对于每一行输入,输出“特殊数字”。注意不要解析输入为0的行
示例:
输入:
1
2
9
0
输出:
1
2
12
-
分析:
- n <= 1500 直接把该范围的结果全部枚举,然后排序即可
不过需要注意2的幂次多余3的幂次多余7的幂次
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long vector<ll> v; const ll up = 1e18; ll fpow(ll a, ll b) { ll cnt = 1; while(b) { if(b&1) cnt *= a; b >>= 1; a *= a; } return cnt; } void init() { for(int i = 0;i < 30;i++) for(int j = 0;j < 20;j++) for(int k = 0;k < 10;k++) { ll cur = fpow(2,i)*fpow(3,j)*fpow(7,k); if(cur < 0) continue; v.push_back(cur); } } int main() { init(); sort(v.begin(),v.end()); int n; while(cin >> n && n) { cout << v[n-1] << endl; } return 0; }