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; }