hdu 5878

来源:互联网 发布:淘宝开学季活动 编辑:程序博客网 时间:2024/06/13 09:32




题意:

给出一个整数nn, 找出一个大于等于nn的最小整数mm, 使得mm可以表示为2^a3^b5^c7^d2a3b5c7d.

思路:

预处理出所有形为2^a3^b5^c7^d2a3b5c7d即可, 大概五千多个.然后用二分查找就可以了


#include <iostream>#include <cstring>#include <algorithm> using namespace std;typedef long long ll;ll ans[10000];ll Pow(int x,int num){ll aaa=1LL;for (int i=1;i<=num;i++){aaa=aaa*1LL*x;}return aaa;}int main(){int cnt=0;for (int i=0;i<=31;i++){for (int j=0;j<=19;j++){for (int k=0;k<=12;k++){for (int l=0;l<=11;l++){ll tmp=Pow(2,i)*Pow(3,j);if (tmp>1e9) break;tmp*=Pow(5,k);if (tmp>1e9) break;tmp*=Pow(7,l);if (tmp>1e9) break;ans[cnt++]=tmp;}}}}sort(ans,ans+cnt);int t;scanf("%d",&t);while(t--){ll n;scanf("%I64d",&n);int x=lower_bound(ans,ans+cnt,n)-ans;printf("%I64d\n",ans[x]);}return 0;}






0 0
原创粉丝点击