找到大约 300 位排列的所有完美正方形

Posted

技术标签:

【中文标题】找到大约 300 位排列的所有完美正方形【英文标题】:Find all perfect squares that are a permutation of some 300 digits 【发布时间】:2011-11-19 13:21:13 【问题描述】:

这是不久前在谷歌采访中问我朋友的一个问题。他无法想出解决方案,但最终还是完成了这项工作。问题来了

你已经得到了 300 个数字,包括 100 个 1、100 个 2 和 100 个 3,现在想出一个算法来确定所有这些数字是一个完美的正方形

我尝试了一段时间,但被难住了。有什么想法可以解决这个问题吗?

【问题讨论】:

每个答案是否必须使用所有提供的数字或任何子集? 我认为这意味着这些数字都有 300 位数字。 @cheeken 每个答案都需要使用所有 300 位数字。 哇。如果我们假装这不是一个技巧问题,那么即使只是检查一个 300 位数字是否是一个正方形,这本身就是一个巨大的问题(SO discussion)。最重要的是,您可能需要测试数量荒谬的排列。 @Queequeg:这是第一个提示有技巧的线索。 【参考方案1】:
   printf ("\n"); 

有问题的集合是空的(数字之和可以被 3 整除,但不能被 9 整除)。

【讨论】:

致任何不明白为什么的人:如果数字之和可以被 3 整除,则该数字可以被 3 整除。同样适用于 9。因为数字之和可以被 3 整除但不是 9,这个数字是 3 但不是 9 的倍数。一个完美的正方形不能正好是 3 的一个因数。【参考方案2】:

n.m 的回答当然很棒。

也很容易看出,在 1,2,3 中唯一可以有其平方的最后一位数字是以 9 开​​头的数字。现在,如果我们使用 9 作为最后一位数字一个与其中一个组合成平方的数字,我们很快就会看到没有 10 的数字以及个位数的 9 可以在其平方的第 10 位给出一个涉及 1,2,3 的数字。

这个解释很可能回答了“300 位数字与 1,2 和 3 的任意组合是否有平方根”之类的问题?

【讨论】:

以上是关于找到大约 300 位排列的所有完美正方形的主要内容,如果未能解决你的问题,请参考以下文章

Python - 在给定的大数范围内找到所有完美正方形的最快方法

在两个数组中找到对,使得当相乘时变成一个完美的正方形

有没有办法找到下一个完美的正方形?

当 Python 中的输入是大数时,如何有效地在一个范围内找到完美的正方形

包括两个端值的完美正方形

在查找c ++范围内的完美正方形时由于超时错误而终止