我觉得这道题挺有意思的,很多人把这道题标签设置欧拉函数,不是很理解。。
题意:
现在有n堆石子,且已知每堆石子的数量,每次操作你可以从任一堆中取一颗石子放到另一堆中,问最少操作几次使得每一堆石子的数量均是某一个数的倍数。即n个数都有一个公因子,a[i]%x==0 (x > 1)
思路:
求出所有数之和sum,显然x一定要是sum的约数,并且最优解时x一定可以是质数
显然这样的x最多不超过30个,所以可以暴力枚举所有满足上述条件的x
处理的时候算出所有的b[i] = a[i]-a[i]/x*x
然后将b[]从大到小排序,遍历一遍就可以得出当前最小移动次数
所有移动次数中取最小就是答案
代码:
1 | /************************************************ |