有人知道找出一个数字的逻辑是不是是完美平方吗? [复制]

Posted

技术标签:

【中文标题】有人知道找出一个数字的逻辑是不是是完美平方吗? [复制]【英文标题】:Anybody Knows the Logic To Find Out a Number is Perfect Square or not? [duplicate]有人知道找出一个数字的逻辑是否是完美平方吗? [复制] 【发布时间】:2011-09-25 23:07:21 【问题描述】:

可能重复:Fastest way to determine if an integer's square root is an integer

有人知道找出一个数字是否是完美平方的逻辑吗? (Other than Newtons Method or Synthetic Division Method)

For Eg:- 4, 16, 36, 64 are Perfect Squares.

我将输入为441,逻辑应该判断它是否是完美正方形。

这是亚马逊面试中提出的一个问题。

我想在没有任何内置函数的情况下这样做

【问题讨论】:

What's a good algorithm to determine if an input is a perfect square? 如果诀窍在于输入本身,那么由于 441 在右侧有一个,那么它不可能是完美正方形。 @Jalal:什么,像 81 不是? :-) @Jalal - 441 = 21^2。至少检查一下... 此外,取任何以 1 结尾的数字,例如 52941,将其乘以自身,得到一个以 1 结尾的正方形。 @regularfry: @Kobi: 我以为那只是 2 的 n 次方。 【参考方案1】:

我要问面试官的第一个问题是,“问题限制是什么?”也就是说,输入的数字可以有多大?如果它足够小,那么您可以预先计算所有完美的正方形并将它们存储在字典中:

IDictionary<long, bool> squares = new Dictionary<long, bool>;
for(long i = 1; i*i <= MAX_NUM; ++i) 
    squares[i*i] = true;

然后,要确定一个数字 x 是否是一个完美的正方形,您只需检查 squares[x] 以查看它是否为真。

【讨论】:

【参考方案2】:

类似的东西会起作用。

public Boolean IsSquare(double input)

    double root, product;
    Boolean isSquare,isGTInput;

    root = 1;
    product = 0;
    isSquare = false;
    isGTInput = false;

    while (!isSquare && !isGTInput)
    
        product = root * root;
        if (product == input)
            isSquare = true;
        else if (product > input)
            isGTInput = true;

        root += 1;
    

    return isSquare;


【讨论】:

这会按照我的要求进行吗 对不起,我不明白你在问什么。 当你使用 root*root 时,这会按照我的要求进行吗 我不认为乘法算作“内置函数”。如果你不能使用乘法运算符,那可能是不可能的。【参考方案3】:

没有 Math.Sqrt,甚至没有乘法:

    static bool IsSquare(int n)
    
        int i = 1;
        for (; ; )
        
            if (n < 0)
                return false;
            if (n == 0)
                return true;
            n -= i;
            i += 2;
        
    

请注意,平方是奇数的部分和。 i 取值 1, 3, 5, 7, ...。部分和 1, 1+3=4, 1+3+5=9, ... 是平方。所以在n -= i之后,我们从n的原始值中减去了平方,我们可以将结果与0进行比较。

【讨论】:

现在试试看,不用加法或乘法:) 不得不说,我很喜欢这个算法。 尽管从快速基准测试来看,使用乘法似乎更快。 惊人的算法,脱帽致敬,伙计。我后悔为什么我讨厌数学:) 我希望我能给你提供数百万的赏金......真的很感激......

以上是关于有人知道找出一个数字的逻辑是不是是完美平方吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 中的 mpfr 包检查一个数字是不是是一个完美的正方形?

如何指定给定数字是不是具有整数平方根? [复制]

找到单个数字的最大完美平方的最快函数?

完美解决数组重排问题

寻找完美平方数

计算乘法为完美平方的所有可能对的有效算法[关闭]