Problem Description 有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数,它们到底是真还是假,也就是这种整数到底存不存在,实在有点吃不准,你能快速回答吗?看来只能通过编程。
Input 输入数据为成对出现的整数n,m(-10000<n,m<10000),它们分别表示整数的和与积,如果两者都为0,则输入结束。
Output 只需要对于每个n和m,输出“Yes”或者“No”,明确有还是没有这种整数就行了。
Sample Input 9 15 5 4 1 -56 0 0
Sample Output No Yes Yes |
#include<stdio.h>
#include<math.h>
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m),(n!=0||m!=0))
{
double x=0;
x=(n+sqrt((n*n-4*m)*1.0))/2;
printf(floor(x)==ceil(x)?"Yes\n":"No\n");
}
return 0;
}
#include<iostream> // 错误代码
#include<cmath>
using namespace std;
int main(){
int m,n;
while (cin>>m>>n&&(n||m)){
double q,e;
double x1,x2;
e=m*m-4*n;
q=sqrt(e);
x1=(m+q)/2;
x2=(m-q)/2;
if (ceil(x1)==x1||ceil(x2)==x2)
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}