传送门:
题意:给n个数,每个数的素数因子不大于2000,让你从其中选则大于等于1个数相乘之后的结果为完全平方数
思路:
- 小于等于2000的素数一共也只有305个
- 一个数,如果他某个素数因子的幂为偶,那这个素数的可以不用考虑;如果幂为奇数,那这个素数就应当被考虑如何与其他数凑成幂为偶数。例如12,可以表示为2^2*3,2的幂次为2,3的幂次为1,所以,如果要和其他数相乘为完全平方数,那么一定要与素数因子3为奇次的合并
- 那么根据上面两条,我们可以列出方程:x1*a11+x2*a12+...+xn*a1n=0;x为解,如果aii取为1,不取为0;aii表示ai的第i个素数因子是否为奇,是为1,否则为0,(素数按从小到大排序,依次为2,3,5,7...)
- 答案即为2^(x中自由元的个数)-1
/************************************************************** Problem:hdu 5833 Zhu and 772002 User: youmi Language: C++ Result: Accepted Time: Memory:****************************************************************///#pragma comment(linker, "/STACK:1024000000,1024000000")//#include #include #include #include #include #include