题解(数学法深度解析)
2023-10-19 01:15:37
发布于:吉林
以下为数学表达法
由题得n=pq,ed=pq-p-q+2(完全平方公式)
把n=pq带入ed,得
ed=n-p-q+2移项
ed-n-2=-q-p同成-1
n-ed+2=p+q
设n-ed+2为m(与下面程序相对应)
即m=q+p
则m2=q2+2qp+p^2同减4n
m2-4n=q2+2qp+p^2-4qp
m2-4n=(q-p)2
设m^2-4n为op
由于平方的非负性
所以op一定>=0否则无解
求op平方根up
若up为小数则不符合题意舍
现在整理一下
up=q-p
m=q+p
所以(up+m)/2为q
如果(up+m)/2为小数则不符合题意
p就是m-q啦
最后先输出小的在输出大的就ok啦
#include<bits/stdc++.h>
using namespace std;
int main(){
long long a,n,e,d,m,op,up,x,y;
cin>>a;
for(int i=1;i<=a;i++){
cin>>n>>e>>d;
m=n-e*d+2;
op=m*m-4*n;
if(op<0){
cout<<"NO\n";
continue;
}
else{
int up=sqrt(op);
if((m+up)%2==1){
cout<<"NO\n";
continue;
}
x=(m+up)/2;
y=m-x;
cout<<min(x,y)<<" "<<max(x,y)<<endl;
}
}
return 0;
}
全部评论 8
6
2024-09-17 来自 广东
15
2024-09-17 来自 广东
14
2024-09-17 来自 广东
1用用LaTeX吧
2024-10-25 来自 广东
0#include<bits/stdc++.h>
using namespace std;
int main(){
long long a,n,e,d,m,op,up,x,y;
cin>>a;
for(int i=1;i<=a;i++){
cin>>n>>e>>d;
m=n-ed+2;
op=mm-4*n;
if(op<0){
cout<<"NO\n";
continue;
}
else{
int up=sqrt(op);
if((m+up)%2==1){
cout<<"NO\n";
continue;
}
x=(m+up)/2;
y=m-x;
cout<<min(x,y)<<" "<<max(x,y)<<endl;
}
}return 0;
}
2024-10-19 来自 江苏
03
2023-10-19 来自 吉林
02
2023-10-19 来自 吉林
01
2023-10-19 来自 吉林
0
有帮助,赞一个