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.
一重for loop解决,不用两重
AC Code
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,sr;
bool flag;
while(cin>>n)
{
flag=0;
sr=pow(2*n-3,0.5);
for(int i=1;i<=sr;i++)
{
int k=pow(2*n-i*(i+1),0.5);
//do not neglect "k>0"
if(k && k*(k+1)+i*(i+1)==2*n)
{
flag=1;
break;
}
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}