题目概述:
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。
方法及代码:
数学法:
class Solution {
public:
bool judgeSquareSum(int c) {
for(int b=2;b*b<c;b++){
if(c%b!=0){
continue;
}
int exp=0;
while(c%b==0){
c=c/b;
exp++;
}
if(b%4==3&&exp%2!=0){
return false;
}
}
return c%4!=3;
}
};
双指针法:
class Solution {
public:
bool judgeSquareSum(int c) {
long left=0;
long right=(int)sqrt(c);
while(left<=right){
int sum=left*left+right*right;
if(sum==c){
return true;
}
if(sum>c){
right--;
}
if(sum<c){
left++;
}
}
return false;
}
};