本文共 1237 字,大约阅读时间需要 4 分钟。
题目来源:
Description
如果一个正整数可以被表示成 2x · 3y( x, y 都是非负整数)的形式,那么这个正整数就称作为 2-3-integer。换句话说,这些称作 2-3-integer 的正整数如果有质因子,那么只能包含 2 和 3。
比如,整数 1、6、9、108是 2-3-integer,而 5、10、21、120 不是。 给定区间 [ l, r ],计算出区间内含有多少个 2-3-integer。Input
输入仅有一行,包含两个整数 l 和 r (1 ≤ l ≤ r ≤ 2 · 109)。
Output
输出一个整数,表示区间 [ l, r ] 内的 2-3-integer 的个数。
Sample Input
100 200
Sample Output
5
解题思路:
将所有范围内符合的2-3-integer的预先处理出来,然后二分查找即可。
(今天我才知道这叫丑数。。。 还是接触的太少啊)AC代码1:
#includeusing namespace std;#define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define endl '\n'typedef long long ll;const int MAXN = 1e3+5;ll arr[MAXN];void init(){ arr[0]=1; int j=0,k=0; for(int i=1;i > l >> r; cout << upper_bound(arr,arr+MAXN,r)-lower_bound(arr,arr+MAXN,l) << endl; return 0;}
上面是我的思路,下面是一个朋友的思路
AC代码2:#includeusing namespace std;#define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define endl '\n'typedef long long ll;int main(){ SIS; ll l,r,ans=0; cin >> l >> r; for(ll i=1;i<=r;i<<=1) { ll num=i; while(num<=r) { if(num>=l) ans++; num*=3; } } cout << ans << endl; return 0;}
转载地址:http://fsyof.baihongyu.com/