我们需要判断是否存在 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 为完美数字 当且仅当同时满足以下两个条件: