小三学算术

题目描述

小三的三分球总是很准的,但对于数学问题就完全没有想法了。他希望你来帮他解决下面的这个问题:对于给定的n,从1!、2!、3!、...、n!中至少删去几个数,才可以使剩下的数的乘积为完全平方数?

输入

仅一行,包含一个整数n(1≤n≤500)。

输出

第一行包含一个整数k,表示最少需要删去的数字个数。
接下来一行,从小到大排列的k个[1,n]之间的整数,给出删数的方案。如果方案不止一种,输出方案从小到大排序序列最小的一组即可。

样例输入

5

样例输出

2
2 5

提示

去掉2!和5!,剩下的是4!,3!和1!,它们的乘积为4! * 3! * 1!= 24 * 6 = 144

 

分析:数学一本通上一本非常神的题.先对每个数分解质因数,如果一个数是完全数,那么它的所有质因子的次数一定要是偶数,这样的话很难操作,没有什么特别好的方法.尝试搜索,因为不知道要删掉几个数,可以用迭代深搜,可能会惊奇地发现自己过了,因为这道题有一个结论:答案不超过3.

先把阶乘两两分组,(1*2!)*(3!*4!)*(5!*6!)......每一组前面的数会被后面的数所覆盖,这些数的质因子的次数一定是偶数,那么把每一组对答案有影响的数给提出来:2*4*6*......再提一个2出来:2*(1*2*3*......)=2!*(n/2)!那么删掉这两个阶乘就好了.这是n为偶数的情况,如果n为奇数,那么就把最后单独的那一个给删掉,然后就变成了偶数的情况,所以最多删3个数.

猜你喜欢

转载自www.cnblogs.com/Accpted/p/11371385.html