As you very well know, this year's funkiest numbers are so called triangular numbers (that is, integers that are representable as , where k is some positive integer), and the coolest numbers are those that are representable as a sum of two triangular numbers.
A well-known hipster Andrew adores everything funky and cool but unfortunately, he isn't good at maths. Given number n, help him define whether this number can be represented by a sum of two triangular numbers (not necessarily different)!
The first input line contains an integer n (1 ≤ n ≤ 109).
Print "YES" (without the quotes), if n can be represented as a sum of two triangular numbers, otherwise print "NO" (without the quotes).
256
YES
512
NO
In the first sample number .
In the second sample number 512 can not be represented as a sum of two triangular numbers.
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int n;
int cheak(int x){
int l=1,r=sqrt(n)+1;
while(l<=r){
int mid=(l+r)/2;
if(mid*(mid+1)==x) return 1;
else if(mid*(mid+1)<x) l=mid+1;
else r=mid-1;
}
return 0;
}
int main(){
scanf("%d",&n);
int flag=0;
for(int i=1;i<=sqrt(n*2);i++)
if(cheak(2*n-i*(i+1))){
flag=1;
break;
}
if(!flag) printf("NO\n");
else printf("YES\n");
return 0;
}