#GESP5010. 挑战怪物

挑战怪物

题目背景

2024 年 9 月 GESP C++ 五级编程第 2 题

题目描述

⼩杨正在和⼀个怪物战⽃,怪物的⾎量为 hh ,只有当怪物的⾎量恰好00 时⼩杨才能够成功击败怪物。

⼩杨有两种攻击怪物的⽅式:

  • 物理攻击。假设当前为⼩杨第 ii 次使⽤物理攻击,则会对怪物造成 2i12^{i-1}点伤害。

  • 魔法攻击。⼩杨选择任意⼀个质数 xxxx 不能超过怪物当前⾎量),对怪物造成 xx 点伤害。由于⼩杨并不擅长魔法,他只能使⽤⾄多⼀次魔法攻击。

⼩杨想知道⾃⼰能否击败怪物,如果能,⼩杨想知道⾃⼰最少需要多少次攻击。

输入格式

第⼀⾏包含⼀个正整数 tt,代表测试⽤例组数。

接下来是 tt 组测试⽤例。对于每组测试⽤例,第⼀⾏包含⼀个正整数 hh ,代表怪物⾎量。

输出格式

对于每组测试⽤例,如果⼩杨能够击败怪物,输出⼀个整数,代表⼩杨需要的最少攻击次数,如果不能击败怪物,输出 1-1

输入输出样例

3
6
188
9999
2
4
-1

样例解释

对于第⼀组测试⽤例,⼀种可能的最优⽅案为,⼩杨先对怪物使⽤魔法攻击,选择质数 55 造成 55 点伤害,之后对怪物使⽤第 11 次物理攻击,造成 211=12^{1-1}=1 点伤害,怪物⾎量恰好为 00,⼩杨成功击败怪物。

数据范围

子任务编号 数据点占比 tt hh
1 20%20\% 5\leq 5 10\leq 10
2 20%20 \% 10\leq 10 100\leq100
3 60%60\% 10\leq 10 105\leq 10^5

对于全部数据,保证有 1t10,1h1051 \leq t \leq 10 ,1 \leq h \leq 10^5