#CF1646C. 阶乘与二的幂

阶乘与二的幂

阶乘与二的幂

  • 时间限制:3 秒
  • 内存限制:256 MiB

题目描述

如果一个数是 22 的幂或阶乘,则称其为“强大数”。换句话说,如果存在非负整数 dd,使得 m=2dm=2^d 或 m=d!m=d!,那么数 mm 就是强大数(其中 d!=1⋅2⋅…⋅dd! = 1 \cdot 2 \cdot \ldots \cdot d,特别地,0!=10! = 1)。例如,11、44 和 66 都是强大数,因为 1=1!1=1!,4=224=2^2,6=3!6=3!,但 77、1010 或 1818 不是强大数。

给定一个正整数 nn,请你求出最小的正整数 kk,使得 nn 能表示为 kk 个互不相同的强大数之和。如果不存在这样的 kk,请输出 −1-1。

输入格式

每组测试数据包含多组测试用例。第一行包含一个整数 tt(1≤t≤1001 \le t \le 100),表示测试用例的数量。

接下来每组测试用例仅一行,包含一个整数 nn(1≤n≤10121 \le n \le 10^{12})。

输出格式

对于每组测试用例,输出一行答案。

如果 nn 不能表示为若干个互不相同的强大数之和,输出 −1-1。

否则,输出一个正整数,表示最小可能的 kk。

样例输入 1

4
7
11
240
17179869184

样例输出 1

2
3
4
1

数据范围

对于所有数据,1≤t≤1001\le t\le100,1≤n≤10121\le n\le10^{12}。相同数值的强大数只能使用一次。

子任务编号 分值 特殊限制
1 30 n≤1000n\le1000
2 n≤106n\le10^6
3 40 无特殊限制