题目描述
给定一个正整数 ,有
次询问,每次给定三个正整数
,
,
,求两个正整数
,
,使
、ei×di=(pi−1)(qi−1)+1
输入格式
第一行一个正整数 k,表示有 k 次询问。
接下来 k 行,第 i 行三个正整数 ni,di,ei。
输出格式
输出 k 行,每行两个正整数pi,qi 表示答案。
为使输出统一,你应当保证 pi≤qi。
如果无解,请输出 。
输入样例
10
770 77 5
633 1 211
545 1 499
683 3 227
858 3 257
723 37 13
572 26 11
867 17 17
829 3 263
528 4 109
输出样例
2 385
NO
NO
NO
11 78
3 241
2 286
NO
NO
6 88
还有
数据范围
以下记 m=n−e×d+2。
保证对于 % 的数据,1≤k≤
,对于任意的 1≤i≤k,1≤ni≤
,1≤ei×di≤
,1≤m≤
。
所以
上CODE!
#include<bits/stdc++.h>
using namespace std;
long long k,n,d,e,m;
int main(){
ios::sync_with_stdio(false);
cin>>k;
while (k--){
cin>>e>>n>> d;
m=e-n*d+2;
double p=(m-1.0*sqrt(m*m-4*e))/2.0;
long long p1=p;
long long q=m-p;
if (m*m-4*e<0||p1!=p||p1*q!=e) cout<<"NO"<<endl;
else cout<<p1<<" "<<q<<endl;
}
return 0;
}