第32902题 程序题
报数(升级版)

报数游戏是一个广为流传的休闲小游戏。参加游戏的每个人要按一定顺序轮流报数,但如果下一个报的数是7的倍数,或十进制表示中含有数字7,就必须跳过这个数,否则就输掉了游戏。

在一个风和日丽的下午,刚刚结束SPC20nn比赛的小r和小z闲得无聊玩起了这个报数游戏。但在只有两个人玩的情况下计算起来还是比较容易的,因此他们玩了很久也没分出胜负。此时小z灵光一闪,决定把这个游戏加强:任何一个十进制中含有数字7的数,它的所有倍数都不能报出来

形式化定义:设 $p(x)$ 表示 $x$ 的十进制表示中是否含有数字7,若含有则 $p(x)=1$,否则 $p(x)=0$。则一个正整数 $x$ 不能被报出,当且仅当存在正整数 $y$ 和 $z$,使得 $x = yz$ 且 $p(y)=1$。

例如:

  • 如果小r报出了6,由于7不能报,所以小z下一个需要报8;
  • 如果小r报出了33,则由于 $34=17\times2$、$35=7\times5$ 都不能报,小z下一个需要报出36;
  • 如果小r报出了69,由于70~79的数都含有7,小z下一个需要报出80才行。

现在小r的上一个数报出了 $x$,小z想快速算出他下一个数要报多少,不过他很快就发现这个游戏可比原版的游戏难算多了,于是他需要你的帮助。当然,如果小r报出的x本身是不能报出的,你也要快速反应过来小r输了才行。

由于小r和小z玩了很长时间游戏,你也需要回答小z的很多个问题。

输入描述

第一行,一个正整数 $T$ 表示小z询问的数量。

接下来 $T$ 行,每行一个正整数 $x$,表示这一次小r报出的数。

输出描述

输出共 $T$ 行,每行一个整数:

  • 如果小r这一次报出的数是不能报出的,输出 -1
  • 否则输出小z下一次报出的数是多少。

输入样例

样例1输入

4
6
33
69
300

样例1输出

8
36
80
-1

样例2输入

5
90
99
106
114
169

样例2输出

92
100
109
-1
180

提示

样例解释 #1

这一组样例的前3次询问在题目描述中已有解释。

对于第4次询问,由于 $300 = 75 \times 4$,而75中含有7,所以小r直接输掉了游戏。

数据范围

  • 对于10% 的数据,$T \leq 10$,$x \leq 100$;
  • 对于30% 的数据,$T \leq 100$,$x \leq 1000$;
  • 对于50% 的数据,$T \leq 1000$,$x \leq 10000$;
  • 对于70% 的数据,$T \leq 10000$,$x \leq 2 \times 10^5$;
  • 对于100% 的数据,$1 \leq T \leq 2 \times 10^5$,$1 \leq x \leq 10^7$。
编辑模式
程序运行统计
暂无判题统计