hdu 1239 水题

View Code
//hdu 1239  水题





//题目从In other words开始看就可以了

//题目给出三个整数 m a b, 0 < a/b < 1

//要求出两个素数 p, q

//使得 p*q <= m 并且 a/b <= p/q <= 1

//要求输出满足条件的 p和 q中 p*q 最大的一对

//我是先打素数表再,暴力过了的





#include <stdio.h>

#include <string.h>



#define N 100005



int m, a, b;

bool no_prime[N];





void get_prime()    //素数打表

{           //317^2 刚好大于 100000

    for(int i = 3; i < 317; i += 2)

    {

        if(no_prime[i] == false)

        {

            int tmp = i << 1;

            for(int j = i * i; j < N; j += tmp)

                no_prime[j] = true; //不是素数的标为true

        }

    }

}



int main()

{

    get_prime();

    while(scanf("%d%d%d", &m, &a, &b), m || a || b)

    {

        bool flag = false;

        double limit = a * 1.0 / b;



        int p = 0, q = 0;

        for(int i = 2; i <= m; ++i) //1 不是素数

        {

            if(no_prime[i] != true && i%2 != 0 || i == 2)

            {

                for(int j = 2; j <= i && i*j <= m; ++j)

                {

                    if((no_prime[j] != true && j%2 != 0 || j == 2))

                    {   //题目要求答案为 满足条件的 p和 q中 p*q 最大的一对

                        if(j*1.0 / i >= limit && i*j > p*q)

                        {

                            p = j;

                            q = i;

                        }

                    }

                }

            }

        }

        printf("%d %d\n", p, q);

    }

    return 0;

}

 

 

你可能感兴趣的:(HDU)