这篇文章上次修改于 231 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

题目传送门

这道题可能让很多人初一白学了。

知道 $p_i\times q_i$。

$e_i \times d_i = (p_i - 1)(q_i - 1) + 1$

稍微变形一下 $e_i \times d_i = p_i\times q_i - p_i -q_i + 2$

带入得 $e_i \times d_i = n_i -p_i -q_i+2$

整理得 $p_i + q_i=2+n_i-e_i \times d_i$

知道 $p_i$ 和 $q_i$ 之和,之积,所以$(p_i-q_i)^2 = (p_i+q_i)^2-4\times p_i\times q_i$

开平方记得判正负。

#include <iostream>
#include <cmath>
#include <cstdio>
#define int long long
using namespace std;
signed main(){
    int k;
    scanf("%lld",&k);
    while(k--){
        int n,d,e;
        scanf("%lld%lld%lld",&n,&d,&e);
        int sum=(2+n-e*d);
        if(sum*sum-4*n<0){
            printf("NO\n");
            continue;
        }
        int cha=sqrt(sum*sum-4*n);
        int p=(cha+sum)/2;
        int q=sum-p;
        if(p>q){
            swap(p,q);
        }
        if(p*q==n&&(p-1)*(q-1)+1==e*d){
            printf("%lld %lld\n",p,q);
        }else{
            printf("NO\n");
        }
    }
    return 0;
}

欢迎到博客看其他题解。