TopCoder SRM 524(11/18 01:00~03:00)
MagicDiamonds
非負整数nを非素数の和で表した時,項の数の最小値はいくつか.
nが非素数の場合
1を返す.
nが素数の場合
2ならば,1+1となるので,2を返せば良い.
その他の場合は奇素数なので,n=1+2mと表せるが,
m=1(即ちn=3)の時は,2mが素数なので,3=1+1+1と表わす他ない.
m>1ならば,2mが非素数であるため,2を返せば良い.
よりシンプルに書くと以下のようになる.
public long minimalTransfer(long n){ return isPrime(n)?1+minimalTransfer(n-1):1; } boolean isPrime(long n){ for(long i=2; i*i<=n; i++){ if(n%i==0){ return false; } } return n>1; }
Challenge Phase
自分も騙されたn=3のケースで1人撃墜.
Result
o-- +1/-0 125.18pts. 491th
1782 -> 1704