解説つき!競ってわかる はじめてpythonプログラミング

競プロの情報発信と備忘録を兼ねている

ABC238A

ABC238A の解説

atcoder.jp

 

解答コード

https://atcoder.jp/contests/abc238/submissions/29069165

 

問題

正の整数nについて 2^n と n^2 の大小を比較する問題です.

 

解説

「与えられた問題文の通りそのまま実装すれば良い」問題がほとんどのA問題ですが,この問題は一筋縄では実装できません.なにせ,2^n が非常に大きな数字になってしまうからです.

そこで,指数関数の方が,nが十分大きな値では爆発的に増加する数学的性質を用います.言い換えれば,nが小さな値,1, 2, 3, ..., 10 あたりでは大小の比較が必要にしても,それよりnが大きくなれば,指数関数の方が勝ちます.

 

そこで手元で,以下のようなコードを実行して,nが小さいときどうなるか確かめます.

print('n', '2^n', 'n^2', 'left>right', sep='\t')
for i in range(1, 10):
    x = 2**i
    y = i**2
    print(i, x, y, x > y, sep='\t')

# n	2^n	n^2	left>right
# 1	2	1	True
# 2	4	4	False
# 3	8	9	False
# 4	16	16	False
# 5	32	25	True
# 6	64	36	True
# 7	128	49	True
# 8	256	64	True
# 9	512	81	True

 

すると,nが 2, 3, 4 の時だけFalse であることがわかります.
よってそのときだけ'No'を出力すれば良いです.

n = int(input())
if n in (2, 3, 4):
    print('No')
else:
    print('Yes')

 

以上,ABC238Aの解法でした.