題目:T – 整數解
有二個整數,它們加起來等於某個整數,乘起來又等於另一個整數,它們到底是真還是假,也就是這種整數到底存不存在,實在有點吃不準,你能快速回答嗎?看來只能通過程式設計。
例如: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
思路:因為這個如果一個一個迴圈列舉進行會非常耗時間,所以可以考慮用數學公式進行;
新技巧:有些題目,與數學的計算有關時,可以利用數學公式進而進行一系列的計算;(在某些時候學會運用數學公式);
程式碼:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int i,j;
int m,n;
while(cin >> n >> m && (n!=0 || m!=0)){//這個位置的都是0才退出,即可以允許有一方為0.
int tag=0; //退出的條件一定要注意,即用&&還是用||,要注意好
int x1,y1,x2,y2;
if((n*n-4*m)>=0){
x1=(int)(n+sqrt(n*n-4*m))/2;
y1=n-x1;
y2=(int)(n-sqrt(n*n-4*m))/2;
x2=n-y2;
if(x1*y1==m||x2*y2==m)//這邊的判斷要特別主要,兩種情況都要進行判斷
tag=1; //有可能是一方成立的;
}
if(tag) cout<< "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}