1 solutions
-
1
观察题目,发现数据范围中
e*d=(p-1)*(q-1)+1以及m=n-e*d+2因式分解得到
ed=p*q-p-q+2所以
m=p+q又
n=p*q发现可以用
求根公式
x = (-b ± √(b² - 4ac)) / (2a)于是算出标准的一元二次方程
q^2-mq+n=0得
a=1,b=-m,c=n代入公式计算再输出即可
#include <bits/stdc++.h> using namespace std; int T; long long hs(long long n,long long m){ //q^2-m*q+n=0 //a=1,b=-m,c=n long long delta=m*m-4*n; if(delta<0)return -1; long long tmp=sqrt(delta); if(tmp*tmp!=delta)return -1; long long p=(m-tmp)/2; if(p*2==m-tmp)return p; return -1; } int main(){ cin>>T; while(T--){ long long n,d,e; cin>>n>>d>>e; long long m=n-e*d+2;//p+q long long ans=hs(n,m); if(ans==-1){ cout<<"NO\n"; }else cout<<ans<<" "<<n/ans<<"\n"; } return 0; }
- 1
Information
- ID
- 7835
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 2
- Tags
- # Submissions
- 92
- Accepted
- 20
- Uploaded By