判断一个整数是否平方数
2009-12-11 20:23
351 查看
因为:以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之间。。。。。
这其实是运用的二分查找的思路。具体实现细节这里不做深究。
所以要判断数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之间。。。。。
这其实是运用的二分查找的思路。具体实现细节这里不做深究。
相关文章推荐
- 判断一个整数是否平方数
- 判断一个整数是否满足完美平方?
- java-判断一个自然数是否是某个数的平方。当然不能使用开方运算
- java 如何判断一个数是否为2的整数次幂
- 对于一个SIZE大小的数组,元素是[0,SIZE-1]区间内的整数,判断其中是否有重复元素
- 编写程序,自定义一函数,用来判断一个整数是否为素数,主函数输入一个数,输出是否为素数
- 输入一个整数,判断其是否是2^n,.............................
- 编写一个函数,从标准输入读取一列整数,把这些值存储于一个动态分配的数组中并返回这个数组。函数通过观察EOF判断输入列表是否结束。数组的第一个数是数组包含的值的个数,他的后面就是这些整数值。
- 判断一个自然数是否时某个数的平方
- 写一个宏,判断整数的某一位是否为1
- 简单JS学习,判断一个数是否为整数
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- JAVA 判断一个整数是否为2的整数次幂的方法
- C语言 - 水仙花数:判断一个任意大小的整数是否为水仙花数
- 写一个宏,判断整数的某位是否为1
- java 编写程序实现从控制台接收一个 5 位以上的整数,使用数组来判断该数字 * 是否是回文数。(例如:789987,12344321是回文数)
- 不使用%和/,判断一个整数是否能被3整除
- 判断一个数是否是正整数
- 判断一个数是否为整数(转)
- 求大于整数m且紧靠m的k个素数 及 判断一个数是否为素数的方法