NEWLANG - Ngôn Ngữ Lập Trình
Dữ liệu vào: standard input
Dữ liệu ra: standard output
Giới hạn thời gian: 3.0 giây
Giới hạn bộ nhớ: 128 megabyte
Đăng bởi: ami

ami và cuom1999 đang tạo ra một ngôn ngữ lập trình mới. Ngôn ngữ hiện tại chỉ hỗ trợ các phép tính +, -, << (trong C++). Trong đó: 

a + b trả về tổng 2 số

a - b trả về hiệu 2 số

a << b trả về a * (2b)

Ví dụ 1 << 5 = 32, 3 << 0 = 3.

ami và cuom1999 muốn cài đặt phép nhân cho ngôn ngữ dựa trên 3 phép toán trên. Chẳng hạn

a * 7  có thể tính bằng a * 8 - a hoặc a * 4 + a * 2 + a. Phép tính thứ nhất chỉ có 2 số hạng, trong khi phép tính thứ 2 có 3 số hạng. Từ đó 2 bạn đặt ra bài toán: làm sao để phép nhân sử dụng ít phép toán nhất có thể. Nói cách khác, cho một số tự nhiên n, hãy biểu diễn n thành tổng và hiệu của ít số hạng có dạng 2k nhất.

Input:

Gồm một số tự nhiên n (0 <= n <= 106).

Output:

In ra số lượng số hạng ít nhất cần dùng để biểu diễn n.

Ví dụ

  • input
    5
    output
    2
  • input
    7
    output
    2
  • input
    2020
    output
    3

Giải thích

7 = 23 - 20

5 = 22 + 20

2020 = 211 - 25 + 22

Back to Top