玩数组

时间:2017-09-24 17:53:35

标签: math numbers

嗨,无法找出以下问题的解决方案(这里是原始问题的链接:Sumita and equal array )。请帮忙吗?

Sumita正在玩一个大小为N的阵列A.她希望A的所有值都相等。她可以通过X,Y和Z将数组中任意数量的值乘以任意次数。您的任务是告诉她是否可以这样做。打印“她可以”,如果她可以做其他打印“她不能”没有“”

输入:

First line of the input will contain T (No. of test cases).
For each test case, first line will contain four space separated integers denoting N, X, Y and Z.
Then next line will contain N space separated integers of A

输出:

For every test case, print the required answer in a new line.

约束:

1 ≤ T ≤ 5
2 ≤ N ≤ 10^5
X, Y, Z ∈ {2, 3, 5, 7}
1 ≤ Ai ≤ 10^9

示例输入:

2
2 2 2 2
2 4
3 2 3 2
2 6 7

示例输出:

She can
She can't

说明:

Test case #1: Multiply first value by 2.
Test case #2: Not possible.

到目前为止我的工作:我发现lcm的X,Y,Z如果该数组中的每个元素被划分或者可以除以lcm然后ans是她可以,她不能

1 个答案:

答案 0 :(得分:0)

既然你提出了自己的想法但没有代码,我会做同样的事情:提出一些想法,但没有代码。如果您尝试编写此想法并陷入困境,请通过显示您的代码来编辑您的问题并寻求更多帮助。

您有正确的想法找到给定数组中数字的最小公倍数(LCM)。对于数组的每个元素,您可以计算LCM和元素的商 - 该商保证为正整数。然后看看是否存在不是X,Y或Z的商的任何素数除数。如果存在这样的除数,那么你的任务是不可能的:"她不能"。如果没有这样的除数,则该元素通过测试。如果所有元素都通过了此测试,则可以执行以下任务:"她可以"。

对于您的第一个数组[2, 4]X, Y, Z[2, 2, 2],数组的LCM为4。第一个商是4 // 2 = 2,该商的唯一主要除数是2,它位于X, Y, Z列表中。第二个商是4 // 4 = 1,它没有素数除数,因此该元素也通过了测试。所有元素都通过了测试。所以任务是可能的。

对于您的第二个数组[2, 6, 7]X, Y, Z[2, 3, 2],数组的LCM为42。第一个商是42 // 2 = 21,它具有素数除数37。第一个(3)位于X, Y, Z列表中,但最后一个(7)不是,因此任务是不可能的。无需检查数组中其他元素的商。

你能编程吗?请注意,我使用的是Python列表而不是数组。另请注意,此算法取决于X, Y, Z作为素数的可能值 - 如果它们可能是复合数,则需要调整算法并使其更复杂。更确切地说,如果X, Y, Z的任何两个可能值是不同的并且不是相对素数(具有大于1的最大公约数),则需要更改算法。