注意到题目要求正整数解,考虑十字相乘
(x-a)(x-b)=0,即x^2-(a+b)x+ab=0
此时p=a+b,q=ab,问题转化为k能否分解为两个自然数a,b满足a+b+ab=k
枚举a得b=(k-a)/(1+a),判断此时的a,b是否满足条件即可
注意到a只需要枚举到sqrt(k),时间复杂度即O(sqrt(k))
#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
using namespace std;
int k;
signed main() {
cin>>k;
if(k==1){
cout<<-1;return 0;
}
if(k%2!=0){
cout<<k/2+1<<" "<<k/2;
return 0;
}
else{
for(int i=1;i<=k/i;i++){
int j=(k-i)/(1+i);
if(i+j+i*j==k){
cout<<i+j<<' '<<i*j;
return 0;
}
}
}
cout<<-1;
return 0;
}