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<cstdio> #include<iostream> #include<cmath> #include<cstdlib> #include<algorithm> using namespace std; #define f(x) (x)*(x+1)/2 int main() { int i=1,j=1,n; bool flag=false; while(~scanf("%d",&n)) { flag=false; for(i=1;f(i)+f(j)<=n;i++) { for(j=i;f(i)+f(j)<=n;j++) { if(f(i)+f(j)==n) { printf("YES "); flag=true; break; } } if(flag) break; j=1; } if(!flag) printf("NO "); } return 0; }