我们需要判断是否存在 a≥1、k≥3,使得 x=a(a+1)⋯(a+k−1)。
直接预处理:枚举所有起点 a 和长度,生成不超过 109 的所有连续正整数乘积放入集合,查询时 O(1) 判断是否在集合中。
枚举上界:因为最短长度为 3,必有 a(a+1)(a+2)≤109。可知 a≲1000;而从 1 开始累乘,长度超过约 13 时已超过 109。因此预处理规模很小。
正确性:若 x 可表示为某段连续正整数乘积,则该段会在预处理枚举中出现。
用户的每一次点赞都代表着对内容的喜爱。小红定义一个正整数 x 为完美数字 当且仅当同时满足以下两个条件:
可以将 x 写作一个公差为 1 且所有元素都是正整数的等差数列的乘积,例如,6 可以写作 1∗2∗3 ;
上述等差数列的长度至少为 3 。
现在小红薯接收到多次 Plog 点赞数查询,每次给出一个正整数 x ,请帮助小红薯判断该点赞数是否为完美数字。
每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≤T≤104) 代表数据组数,每组测试数据描述如在一行上输入一个整数 x(1≤x≤109) ,表示一次点赞数查询。
对于每组测试数据,新起一行,如果点赞数是完美数字,输出 YES ;否则,输出 NO 。
输入
3
6
2
24
输出
YES
NO
YES