判断一个整数是否平方数

因为:以1为首项,2为公差的等差数列的求和公式为n^2.

所以要判断数k是否平方数,只须:

从该等差数列的左边开始,k不断的减数列的项,直至减不过为止。

此时如果k的值变为0,则k为平方数,并且执行减法的次数即是k的平方根!

也可以用k不断的去除素数列,从2开始,不断除2,至不能整除,再接着除3,至不能整除,然后接着5、7、11.。。。,一直除到k的值为1! 然后看它刚才整除过的那些素数,如果这些素数可以分成两个完全相同的集合。那么k是平方数。并且分成的集合的所有元素之积就是k的平方根!

以上方法虽然可行,但是当要判断的数很大的时候,要执行的减法太多,所以算法效率不高。还不如直接从1开始,比较每个数的平方与k的大小,这样相对要快一些。

还有如下思路可判断k是否平方数:

如果k的位数是奇数,比如位数为5,那么k的平方根必然是在100和320之间,先判断220的平方和k的大小,如果小于k,那么再判断220与320的中位数的平方与k的大小,反之判断100和220的中位数的平方与k的大小。。。 如此不断迭代下去,就可以判断k是否平方数。

如果k的位数是偶数,比如位数为6,那么k的平方根是在300和1000之间。。。。。

这其实是运用的二分查找的思路。具体实现细节这里不做深究。

猜你喜欢

转载自blog.csdn.net/chaohi/article/details/4988030