51nod1010(枚举+二分)
2024-08-29 20:33:07
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010
题意:中文题诶~
思路:求第一个比 x (1<=x<=1e18)大或者等于的数y, 且y的因子只有2, 3, 5,即y=pow(2, i)*pow(3, j)*pow(5, k);
那么显然我们可以通过枚举i, j, k求出所有由2, 3, 5因子构成的数,并将其存入数组中,再二分查找数组中第一个大于等于x的数即为答案;
代码:
#include <bits/stdc++.h>
#define ll long long
#define MAXN 100000
using namespace std; ll a[MAXN];
const ll inf=1e18; ll get_pow(ll x, int n){
ll ans=;
while(n){
if(n&){
ans*=x;
}
x*=x;
n>>=;
}
return ans;
} void geloutingyu(void){ //**注意不能直接用pow(),会有精度问题
int pos=;
for(ll i=; get_pow(, i)<=inf; i++){
for(ll j=; get_pow(, i)*get_pow(, j)<=inf; j++){
for(ll k=; get_pow(, i)*get_pow(, j)*get_pow(, k)<=inf; k++){
a[pos++]=get_pow(, i)*get_pow(, j)*get_pow(, k);
}
}
}
} int main(void){
int t;
ll x;
geloutingyu();
sort(a, a+MAXN);
cin >> t;
while(t--){
cin >> x;
if(x==){
cout << << endl;
continue;
}
int pos=lower_bound(a, a+MAXN, x)-a;
cout << a[pos] << endl;
}
return ;
}
最新文章
- MySQL性能优化:索引
- 关于ie11 的开发者工具
- Linux之Shell的算术运算
- stty命令使用
- [转]编译VC++程序warning C4819快速解决
- SourceTree - 好用的 Git / Mercurial GUI 管理工具 for Mac OS X
- linux 安装软件的地方
- 24、Javascript BOM
- ASP.NET MVC应用程序更新相关数据
- spring容器启动的加载过程(一)
- 关于MongoDB安全事件的一些思考
- Linux视频主要概述
- myeclipse的debug模式启动不了,但run模式可以启动
- 最近学习的 Node.js 数组_函数
- logging模块初识
- iOS 10.3下解决Fiddler代理抓包ssl证书信任问题
- IBus prior to 15.11 may cause input problems. See IDEA-78860 for details.
- iperf测试网络带宽
- 【WIN10】Segoe MDL2 Assets
- hdu 5821 Ball 贪心