天天看點

E - 整數解

有二個整數,它們加起來等于某個整數,乘起來又等于另一個整數,它們到底是真還是假,也就是這種整數到底存不存在,實在有點吃不準,你能快速回答嗎?看來隻能通過程式設計。  
例如:  
x + y = 9,x * y = 15 ? 找不到這樣的整數x和y  
1+4=5,1*4=4,是以,加起來等于5,乘起來等于4的二個整數為1和4  
7+(-8)=-1,7*(-8)=-56,是以,加起來等于-1,乘起來等于-56的二個整數為7和-8  
 
             
 
        

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      

其實這道題的關鍵

就是解方程而已

/* 
x = 9 - y
(9 - y)*y = 15;
-y2+9y-15=0
判斷jia*jia-4*cheng
*/
           

首先根據b2-4ac這個公式來看一下有沒有根

有根之後我們求一下看看是不是整數解

對于不是整數的解,我就強制轉換成int後

再和原來的數字進行一次比較

如果是相同的話就是說明這是整數解

如果不是的話那麼就是非整數解啦!

#include<iostream>#include<cmath>using namespace std;int main(){int x = ;int y = ;while (cin >> x >> y){if (x == && y == )break;int j = x*x - * y;if (j < )cout << "No" << endl;else{double i = (-x + sqrt(j) )/ ();double k = (-x - sqrt(j)) / ();if ((int)i==i && (int)k==k){cout << "Yes" << endl;}else{cout << "No" << endl;}}}}