题目链接:
思路:假定一个硬币初始时是正面,它被翻转偶数次仍然是正面,翻转奇数次就是反面。考虑位于坐标(x, y)的隐蔽,设a是x的约数,b是y的约数,那么翻转坐标为(a, b)的硬币时,(x,y)也会翻转,我们只关心(x,y)翻转次数的奇偶性。那么(x,y)的翻转次数就是x的约数个数 * y的约数个数,题目要求计算反面的数量,那么就只考虑奇数次翻转,只有当x的约数个数是奇数并且y的约数个数是奇数时它们的乘积才是奇数。
那么哪些数的约数个数是奇数个?
4:1,2,4
5:1,5
6:1,2,3,6
9:1,3,9
16:1,2,4,8,16
不难发现只有平方数的约数个数是奇数,那么对于n*m的矩阵,只要计算出其中坐标(x,y)满足x是平方数,y也是平方数的数量就是答案。行下标是平方数的有sqrt(n)个,列下标是平方数的有sqrt(n)个,那么ans = sqrt(n) * sqrt(m).
AC代码
#include #include #include #include #include #include #include #include
如有不当之处欢迎指出!