http://acm.hdu.edu.cn/showproblem.php?pid=2092
問題
Problem Description
有二個(gè)整數(shù)睹逃,它們加起來等于某個(gè)整數(shù)盗扇,乘起來又等于另一個(gè)整數(shù),它們到底是真還是假沉填,也就是這種整數(shù)到底存不存在疗隶,實(shí)在有點(diǎn)吃不準(zhǔn),你能快速回答嗎拜轨?看來只能通過編程抽减。
例如:
x + y = 9,x * y = 15 ? 找不到這樣的整數(shù)x和y
1+4=5橄碾,14=4卵沉,所以,加起來等于5法牲,乘起來等于4的二個(gè)整數(shù)為1和4
7+(-8)=-1史汗,7(-8)=-56,所以拒垃,加起來等于-1停撞,乘起來等于-56的二個(gè)整數(shù)為7和-8
Input
輸入數(shù)據(jù)為成對出現(xiàn)的整數(shù)n,m(-10000<n,m<10000)悼瓮,它們分別表示整數(shù)的和與積戈毒,如果兩者都為0,則輸入結(jié)束横堡。
Output
只需要對于每個(gè)n和m埋市,輸出“Yes”或者“No”,明確有還是沒有這種整數(shù)就行了命贴。
Sample Input
9 15
5 4
1 -56
0 0
Sample Output
No
Yes
Yes
分析
要不窮舉道宅,要不方程式,因?yàn)閿?shù)學(xué)公式韋達(dá)定理胸蛛,知道兩根之和和之積
x+y=n
xy=m
變形
(x+y)2=n2
(x-y)2=(x+y)2-4xy=n^2-4m
x-y=sqrt(n^2-4m)
最后可以解得x-y是不是整數(shù)
代碼
#include <stdio.h>
#include<math.h>
int main(){
int m,n;
while(scanf("%d%d",&n,&m)!=EOF&&n+m!=0)
{
double sum1;
sum1=sqrt(n*n-4*m);
int sum2=sqrt(n*n-4*m);
if(sum1==sum2){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}