报数

普及/提高- GESP五级 筛法 预处理 数论

题目描述

题目描述

报数游戏中,参与者按顺序轮流报出正整数。若一个数是 $7$ 的倍数,或十进制表示中含有数字 $7$,这个数就不能被报出。

现在规则进一步加强:如果某个正整数的十进制表示中含有数字 $7$,那么它的所有正整数倍也都不能被报出。

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

例如,若当前报出的数是 $6$,由于 $7$ 不能报出,下一次应报 $8$;若当前报出的数是 $33$,由于 $34=17\times 2$、$35=7\times 5$ 都不能报出,下一次应报 $36$;若当前报出的数是 $69$,由于 $70\sim79$ 都含有数字 $7$,下一次应报 $80$。

给定多次询问。对于每个正整数 $x$,如果 $x$ 本身不能被报出,输出 $-1$;否则输出大于 $x$ 的最小的、可以被报出的正整数。

输入格式

第一行一个正整数 $T$,表示询问次数。

接下来 $T$ 行,每行一个正整数 $x$。

输出格式

输出 $T$ 行。对于每个询问,如果 $x$ 本身不能被报出,输出 $-1$;否则输出大于 $x$ 的最小的、可以被报出的正整数。

数据范围

样例解释 1

前 $3$ 次询问分别对应题目描述中的例子。

对于第 $4$ 次询问,$300=75\times4$,而 $75$ 中含有数字 $7$,因此 $300$ 不能被报出,输出 $-1$。

数据范围

对于 $10\%$ 的数据,$T\le 10$,$x\le 100$。

对于 $30\%$ 的数据,$T\le 100$,$x\le 1000$。

对于 $50\%$ 的数据,$T\le 1000$,$x\le 10000$。

对于 $70\%$ 的数据,$T\le 10000$,$x\le 2\times 10^5$。

对于所有数据,$1\le T\le 2\times 10^5$,$1\le x\le 10^7$。

样例输入 1

4
6
33
69
300

样例输出 1

8
36
80
-1

样例输入 2

5
90
99
106
114
169

样例输出 2

92
100
109
-1
180
时间限制: 1000ms
内存限制: 512MB
通过率: 100.0%
提交数: 1

设置

导航栏小工具

时钟
显示实时时钟(默认组件)
📝
代码粘贴板
快速创建和分享代码片段