カメヲラボ

主にプログラミングとお勉強全般について書いてます

Humble Numbers

http://acm.pku.edu.cn/JudgeOnline/problem?id=2247
素因数に2,3,5,7のいずれかしか持たない数を求める問題。但し"1"だけはHumble Numberとして考えるみたい。入力Nに対して出力が1から数えてN番目のHumble Numberだから、最初にHumble Numbersの配列を作っておけばよさそうだ。id:dai_yashさんがTLEと戦ってらっしゃるので、ついついやってみたのだが、トラックバックしてしまうと見たい見たくないにかかわらずソースモロ見えスマソ(;´д`)
っちゅうわけで、せめて改行をいっぱい入れとくことにする・・・。今日はJava



















import java.util.*;

class Main {

public static void main(String a[]){
int i,N;
int humble[] = new int[6000];
int prime2=1, prime3=1, prime5=1, prime7=1;

humble[1] = 1;

for( i=2;i<=5842;++i ){
int min1 = Math.min( 2*humble[prime2], 3*humble[prime3] );
int min2 = Math.min( 5*humble[prime5], 7*humble[prime7] );
humble[i] = Math.min( min1, min2 );

if( humble[i] == 2*humble[prime2] ) ++prime2;
if( humble[i] == 3*humble[prime3] ) ++prime3;
if( humble[i] == 5*humble[prime5] ) ++prime5;
if( humble[i] == 7*humble[prime7] ) ++prime7;
}

Scanner c=new Scanner(System.in);

while(c.hasNext()){

N=c.nextInt();
if( N == 0 ) break;

String counter = "th";
if( (N/10)%10 != 1 ){
switch( N%10 ){
case 1: counter = "st"; break;
case 2: counter = "nd"; break;
case 3: counter = "rd"; break;
}
}

System.out.println("The "+N+counter+" humble number is "+humble[N]+".");
}
}
}