9 15 5 4 1 -56 0 0
No Yes Yes
#include<stdio.h>
int a[20050][2];
int main()
{
int n,m;
int i,j,k,ok;
while(scanf("%d%d",&n,&m)&&(n!=0||m!=0))
{
k=0;
if(m<0)
{
k=1;
m=-m;
}
for(i=1,j=0;i*i<=m;i++)
{
if(m%i==0)
{
if(k==0)
{
a[j][0]=i;
a[j][1]=m/i;
j++;
a[j][0]=-i;
a[j][1]=-m/i;
j++;
}
else
{
a[j][0]=-i;
a[j][1]=m/i;
j++;
a[j][0]=i;
a[j][1]=-m/i;
j++;
}
}//注意考虑到符号,因为存在负数
}
ok=0;
for(i=0;i<j;i++)
if(a[i][0]+a[i][1]==n)
{
ok=1;
break;
}
if(ok==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
} 原文:http://blog.csdn.net/wangluoershixiong/article/details/41704473