题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1239
一道水题,素数筛选即可
View Code
1 #include<iostream> 2 #include<cmath> 3 const int N=11000; 4 using namespace std; 5 bool mark[N]; 6 int prime[N]; 7 8 //素数筛选 9 void sieve_prime(){ 10 memset(mark,true,sizeof(mark)); 11 mark[0]=mark[1]=false; 12 for(int i=2;i<sqrt(N*1.0);i++)if(mark[i]){ 13 for(int j=i*i;j<N;j+=i){ 14 mark[j]=false; 15 } 16 } 17 } 18 19 int main(){ 20 int m,a,b; 21 while(scanf("%d%d%d",&m,&a,&b)!=EOF){ 22 if(m==0&&a==0&&b==0)break; 23 double temp=a*1.0/b; 24 sieve_prime(); 25 int k=0,max=0,p=2,q=2; 26 for(int i=2;i<N;i++)if(mark[i]){ 27 prime[k++]=i; 28 } 29 for(int i=0;i<k;i++){ 30 for(int j=i;j<k;j++){ 31 if(prime[i]*prime[j]>max&&prime[i]*prime[j]<=m&&prime[i]*1.0/prime[j]>=temp){ 32 p=prime[i]; 33 q=prime[j]; 34 max=prime[i]*prime[j]; 35 } 36 if(prime[i]*prime[j]>m)break; 37 } 38 } 39 printf("%d %d\n",p,q); 40 } 41 return 0; 42 }