由于 n≤1018,阶乘增长非常快:
19!<1018,20!>1018
因此只需要枚举 x=1 到 x=19。
预处理时依次计算 x!,并判断 x!+1 是否为完全平方数。判断方法是计算其整数平方根 r,若
给定一个正整数 n(数值范围可能极大),请找出所有满足以下两个条件的正整数 x:
要求输出所有满足条件的 x 值。若不存在满足条件的 x,则输出相应提示。
第一行输入一个整数 T(1≤T≤5×104),表示查询的组数。
接下来 T 行,每行输入一个整数 n(1≤n≤1018),表示该组查询的上界。
对每组查询输出一行,按从小到大的顺序输出所有满足条件的 x,相邻两个数之间用一个空格分隔。
若该组查询不存在满足条件的 x,则该行输出 −1。
输入
3
1
25
5041
输出
-1
4
4 5 7
说明
第一组查询 n=1,任意正整数 x 都有 x!+1≥2>1,不存在满足条件的 x,输出 −1。
第二组查询 n=25,4!+1=25=52 是完全平方数且不超过 25,满足条件;而 5!+1=121>25 已经超出上界,所以只输出 4。
第三组查询 n=5041,4!+1=25=52,5!+1=121=112,7!+1=5041=712,三者都是完全平方数且不超过 5041;而 6!+1=721 虽然不超过 5041,但它不是完全平方数,所以输出 4, 5, 7。
输入
2
121
1000000000000000000
输出
4 5
4 5 7
说明
第一组查询 n=121,4!+1=25 与 5!+1=121 都不超过 121 且都是完全平方数,而 7!+1=5041>121 被排除,所以输出 4, 5。
第二组查询 n=1018,在 x!+1<1018 的范围内(即 x≤19)只有 x 取 4, 5, 7 时 x!+1 是完全平方数。
本题属于以下题库,请选择所需题库进行购买
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.