一个数的次方可以拆成两个数的次方相加么

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个数的次方可以拆成两个数的次方相加么相关的知识,希望对你有一定的参考价值。

首先看是不是限制为整数
如果没有要求为整数,显然很容易拆开
如果要求为整数,那么对次方数怎么限制了
如果就是二次方,那么勾股数就可以,
比如3²+4²=5²,5²+12²=13²等等
而三次方没有这样的组合
参考技术A 5^2=3^2+4^2,是这个意思么

快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方!

快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方!

将4的幂次方写成2进制形式后,很容易发现有个特点,2进制中只有1个1(1在奇数位置),并且后面跟了偶数个0;因此问题可以转化为判断1后面是否跟了偶数个0就可以了。

4的整数次幂的二进制可以写为2^(2*n),即也可以写成2的幂次方,当然就满足2的幂次方的条件,即num&(num-1)==0.

思路:首先用条件num&(num-1)==0来判断是否为2的幂次方,若不满足,则不是。若满足,再用条件num&0x5555 5555 来判断,若为真,则这个整数是4 的幂次方。否则不是。

 

#include "stdafx.h"
//#include "stdio.h"
//#include "stdlib.h" bool func(unsigned int x)//判断x是否是4的幂次方 { if ( x&(x-1) )//判断x是否为2的幂次方 return false; return x&0x55555555;//判断1是否在奇数位置上 } int log4(int value)//递归判断一个数是4的多少次方 { if(value==1) return 0; else { value>>=1;//往右移位 return 1+log4(value>>1);//往右移位 } } int _tmain(int argc, _TCHAR* argv[]) { int num; cout<<"请输入一个整数:"; cin>>num; if(func(num))//使用与运算判断一个数是否是2的幂次方 cout<<num<<"是4的"<<log4(num)<<"次方!"; else cout<<num<<"是4的幂次方!"; system("pause"); return 0; }

 

以上是关于一个数的次方可以拆成两个数的次方相加么的主要内容,如果未能解决你的问题,请参考以下文章

数的每一位平方和

不同阶的矩阵可以相乘吗

数的每一位平方和

数的每一位平方和

求把某数分拆成几个自然数的和,求这些数的最大乘积的公式

C语言两个特别大的整数类型相加超出范围使用两个技巧