1 solutions

  • 1
    @ 2025-10-12 10:55:17
    观察题目,发现数据范围中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