心动网络×Taptap研发笔试题探讨

做了老长时间还没做出来,求有无大神指导一下:
题目:
给定两个正整数 ds,请找到另外两个正整数ab满足以下条件:
1. a,b最大公约数为d
2. a2 - b2 = s;
如果有多种可能的ab,返回a最大的一组。
输入要求:两个64位无符号正整数。
例子:
1. d=38, s=23104;
a=190, b=114.
2. d=20, s=12400;
a=320, b=300.
3. d=1, s=27;
a=14, b=13.
我的思路:先判断d是否为1,如果为1ab为互质数。两种情况,一种是b=1,另外一个数就等于(s+1)的平方根;b不为1的话,就从1开始,两个相邻的数的和等于s的时候,循环结束。
d不为1的情况下,循环从1d的数i,判断s/d2+i2的平方根r是否为整数,如果是的话,判断i*dr*d的最大公因数是否为d,如果是,再跟maxA比较,如果大于maxA,则maxA等于这个r*d直到循环结束。
本来还考虑了ab两个数除以d的因数都大于d,但是我这一块的思路应该有问题不知道是不是循环过多还是算法复杂度太大加上会程序超时,最后也没有AC. QAQ
蹲一个大佬康康分享下~~~谢谢!!!

#笔试题目##心动网络#
全部评论
这是长期试卷吧,不适合对答案😥
点赞 回复
分享
发布于 2020-10-18 23:22

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务