hdu5878(枚举,打表)

题目链接:hdu5878

题意:到一行输入t,表示下面有t组数据,然后下面t行每行输入一个数n;

定义x==2^a*3^b*5^c*7^d(a, b, c, d为自然数,x不大于1e+9);

要求对于每一个n输出>=n的最小x;

思路:由于x比较大,可以先打个表;

依次枚举a,b,c,d将所有不大于1e+9的x存到数组a中,再用;lower_bound()找一下即可;

代码:

#include<bits/stdc++.h>
#define MAXN 10000
#define MAX 1000000000
#define eps 1e-6
#define ll long long
using namespace std;

ll a[MAXN];

void get_number(void)  //***打表,将所有不大于1e+9的x存数组a中
{
    ll flag;
    int pos=0;
    for(int i=0; pow(2, i)<=MAX; i++)
    {
        for(int j=0; pow(2, i)*pow(3, j)<=MAX; j++)
        {
            for(int k=0; pow(2, i)*pow(3, j)*pow(5, k)<=MAX; k++)
            {
                for(int l=0; pow(2, i)*pow(3, j)*pow(5, k)*pow(7, l)<=MAX; l++)
                {
                    a[pos++]=pow(2, i)*pow(3, j)*pow(5, k)*pow(7, l);
                }
            }
        }
    }
}

int main(void)
{
    std::ios::sync_with_stdio(false), cin.tie(0), cin.tie(0);
    ll t, n;
    get_number();
    sort(a, a+MAXN);
    cin >> t;
    while(t--)
    {
        cin >> n;
        int pos=lower_bound(a, a+MAXN, n)-a;   //****二分查找第一个大于等于n的数,返回指针;
        cout << a[pos] << endl;
    }
    return 0;
}

时间: 2024-10-20 02:14:37

hdu5878(枚举,打表)的相关文章

poj 1840 Eqs 【解五元方程+分治+枚举打表+二分查找所有key 】

Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 13955   Accepted: 6851 Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The coefficients are given integers from the interval [-50,50]. It i

51Nod 1016 水仙花数 V2(组合数学,枚举打表法)

1016 水仙花数 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3 + 3^3 = 153,1634 = 1^4 + 6^4 + 3^4 + 4^4). 给出一个整数M,求 >= M的最小的水仙花数. Input 一个整数M(10 <= M <= 10^60) Output 输出>= M的最小的水仙花数,如果没有符合条件的

UVA 12716 GCD XOR(数论+枚举+打表)

 题意:给你一个N,让你求有多少组A,B,  满足1<= B <= A <= N, 且 gcd(A,B) = A XOR B. 思路:首先我们可以得出两个结论: A-B >= A%B >= gcd(A, B) A xor B >= A-B 所以说A xor B >= A-B >= gcd(A, B),然后就可以推出 A xor B = A - B = gcd(A, B) =>    A xor B = A - B  &&  A -

枚举enum

枚举值:它是一个整形(int) 并且,它不参加内存的占用和释放 枚举定义变量即可直接使用,不用初始化. 枚举的定义如下: 方式一: typedef enum{  //在这个地方,可以定义相同的名称,给要用到的类型起个标识符,这个地方,是可以省略的 unknown,       //大括号里面的内容,依据程序员的需要来填充,使用逗号隔开,最后一个可以不使用符号,默认的序号是从0开始的,最好在标记时给它赋值=0 //如果在中途给它定义了数字,比如unknown=7,则以后的字符的序号依次递增,iPa

iOS 枚举类型学习

一,两者的用法 枚举类型定义用关键字enum标识,形式为: enum 标识符 { 枚举数据表 }:枚举数据(枚举常量)是一些特定的标识符,标识符代表什么含义,完全由程序员决定.数据枚举的顺序规定了枚举数据的序号,从0开始,依次递增.enum status{ copy, delete }:枚举类型status仅有两个数据,一个是copy,一个是delete,序号为0.1,代表复制与删除.enum status{ copy=6, delete }:则copy的序号为6,delete的序号为7.   

枚举类型enum

枚举类型的定义 枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合. 定义格式:枚举类型的定义格式为:    enum <类型名> {<枚举常量表>};其中: 关键字enum——指明其后的标识符是一个枚举类型的名字. 枚举常量表——由枚举常量构成.“枚举常量”或称“枚举成员”,是以标识符形式表示的整型量,表示枚举类型的取值.枚举常量表列出枚举类型的所有取值,各枚举常量之间以“,”间隔,且必须各不相同.取值类型与条件表达式相同. 应用举

维表设计

时间维表 统计时间一般被分为日.周.月,其中天都能通过时间可直接截取成某一天20141125,月份也可配截取成20141001 或者 201410,但是周在一年中的开始和结束不一定都是完整的,建议2015W01为新年的第一天到新年第一个周日结束(20140101-20140104),最后一周为2015年的最后一个周一到新年最后一天(20151228-20151231) 函数方式:可以自定义函数来获取这一天所在的 年.月.周 function get_week_of_year(start_date

HDU 1058 Humble Numbers (dp+打表)

先是想筛法素数表啊,然后1~2000000000枚举打表啊,结果越想越不对. 后来想到唯一分解定理,可是怎么实现呢..果然还是需要努力啊.. 研究了discuss代码,码之~ ~~~~ dp的思想,若dp[i]是Humble Numbers,那么dp[i]*2,dp[i]*3,dp[i]*5,dp[i]*7都将是Humble Numbers. 所以只需要注意连续性便好了. #include<cstdio> #include<algorithm> #include<cmath&

内核模式下的注册表操作

注册表操作 注册表里的几个概念: 1.       创建关闭注册表项 NTSTATUS    ZwCreateKey(     OUT PHANDLE  KeyHandle,     IN ACCESS_MASK  DesiredAccess, //访问权限,一般为KEY_ALL_ACCLESS     IN POBJECT_ATTRIBUTES  ObjectAttributes,     IN ULONG  TitleIndex, //一般为NULL     IN PUNICODE_STRI