読者です 読者をやめる 読者になる 読者になる

君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

Codeforces Round #270

はい。
http://codeforces.com/contest/472

A. Design Tutorial: Learn from Math

ざっくりと大意

・与えられたnを2つの合成数に分ける。

方針のようなもの

・無理に2つの数が近い大きさにする必要とかないので小さい方から探す。

n=int(raw_input())
m=[4,6,8,9,10,12,15,21,33,27]
c=['0','2','4','5','6','8']
if n==13 or n==19:
    print 4,n-4
elif n==17:
    print 8,9
else:
    for i in m:
        if str(n-i)[-1] in c:
            print i,n-i
            break

引用はウィキペディアから http://ja.wikipedia.org/wiki/%E5%90%88%E6%88%90%E6%95%B0
4以上の全ての偶数は合成数である。 10以上の数では一の位が 0,2,4,5,6,8 であれば全て合成数である。
引用ここまで

但し、一の位が3でも33は約数が1,11,33とあるので合成数である。20以下の奇数は一の位だけを見る適当な判定が通用しないので先に例外として処理する。

と思ったけどとてもシンプルな解があった。偶数奇数も見れば活用出来るのかなとか思ってはいたけど。。zbwengさんのコードを。
http://codeforces.com/contest/472/submission/8000972

def main():
    n = input()
    if n % 2 == 0:
        print('%d %d' % (4, n-4))
    else:
        print('%d %d' % (9, n-9))


main()