牛牛爱数学
时间限制:1秒 空间限制:256M
网页链接
牛客tracker
牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!
题目描述
牛牛可喜欢数学啦。
作为数学爱好者,牛牛可是个数学大师。牛牛的数学老师也知道这一点,所以让牛牛参与了数学考试的命题。牛牛为了让大家都能做对,所以出了一个简单的题。现在有a 、 b 、 c a、b、ca、b、c三个正整数,牛牛想要知道,是否存在一个正整数d dd,使得a 2 d 2 + b 2 c 2 = 2 a b c d a^2d^2+b^2c^2=2abcda2d2+b2c2=2abcd成立。
输入描述:
输入一个T ( 1 ≤ T ≤ 10 5 ) T( 1≤T≤10^5)T(1≤T≤105),表示接下来有T组测试数据,接下来T TT行。
每行输入三个数a 、 b 、 c a、b、ca、b、c。( 1 ≤ a 、 b 、 c ≤ 10 9 ) (1≤a、b、c≤10^9)(1≤a、b、c≤109)
输出描述:
输出有T TT行,每行对应一个结果,如果存在,请输出任意一个满足的d的值,不存在请输出" − 1 " "-1""−1"。
示例1
输入:
2 1 1 1 3 4 5输出:
1 -1解题思路
本题核心是完全平方公式因式分解,将复杂方程化简为简单的整除判定问题,高效应对超大数据和多组测试用例。对原式a 2 d 2 + b 2 c 2 = 2 a b c d a^2d^2+b^2c^2=2abcda2d2+b2c2=2abcd移项整理,套用完全平方公式可得:( a d − b c ) 2 = 0 (ad - bc)^2 = 0(ad−bc)2=0,直接推出唯一解a d = b c ad = bcad=bc,即d = b ⋅ c a d=\frac{b \cdot c}{a}d=ab⋅c。由于d dd必须是正整数,仅需判断b × c b \times cb×c能否被a aa整除:若可以整除,商即为合法的d dd;若无法整除,则不存在解,输出− 1 -1−1。算法为常数级运算O ( 1 ) O(1)O(1),完美适配T ≤ 10 5 T \le 10^5T≤105、数值上限10 9 10^9109的所有约束。
总结
核心逻辑:配方化简方程,将求解问题转化为整除性判断,直接得出唯一整数解。
关键操作:完全平方公式推导、乘法整除校验。
效率保障:单组测试用例无循环、无复杂计算,极速处理十万级输入。
代码内容
#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;voidS(){ll x,y,z;cin>>x>>y>>z;ll w=y*z/x;if(x*w==y*z)cout<<w<<endl;elsecout<<-1<<endl;}intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);ll T=1;cin>>T;while(T--)S();return0;}