1411 Calling Extraterrestrial Intelligence Again

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

1411 Calling Extraterrestrial Intelligence Again

問題

解答例

昔Cで書いたプログラムを書き換えたものなので汚いです.
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int[] prm = new int[20000];
        makePNTable(prm);
        while(true){
            int m = sc.nextInt();
            int a = sc.nextInt();
            int b = sc.nextInt();
            
            if(m==0 && a==0 && b==0) break;

            int i;
            for(i=0;prm[i]*prm[i]<=m;i++){
                //do nothing
            }
        
            int pi,qi,mpi,mqi;
            pi = qi = mpi = mqi = i-1;
            int max = prm[mpi] * prm[mqi];
        
            while(b*prm[pi]>=a*prm[qi]){
                if(prm[qi]*prm[pi]<=m){
                    qi++;
                    if(prm[qi]*prm[pi]<=m){
                        if(prm[qi]*prm[pi]>max && b*prm[pi]>=a*prm[qi]){
                            mpi = pi;
                            mqi = qi;
                            max = prm[pi] * prm[qi];
                        }
                    }
                }
                else{
                    if(pi==0) break;
                    
                    pi--;
                    if(prm[qi]*prm[pi]<=m){
                        if(prm[qi]*prm[pi]>max && b*prm[pi]>=a*prm[qi]){
                            mpi = pi;
                            mqi = qi;
                            max = prm[pi] * prm[qi];
                        }
                    }
                }
            }
            
            System.out.println(prm[mpi]+" "+prm[mqi]);
        }
    }
    /* make list of Prime Numbers : size = 50000 */
    private static void makePNTable(int[] p){
        int i,j,k;
        int flag ;
        k = 0;
        p[k++] = 2;
        for(i=3;i<50000;i+=2){
            flag = 0;
            for(j=0;(p[j]*p[j])<=i;j++){
                if(i % p[j] == 0){
                    flag = 1;
                    break;
                }
            }
            if(flag == 0){
                p[k++] = i;
            }
        }
    }
}
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。