给你一个整数 num
,请你找出同时满足下面全部要求的两个整数:
- 两数乘积等于
num + 1
或num + 2
- 以绝对差进行度量,两数大小最接近
你可以按任意顺序返回这两个整数。
示例 1:
输入:num = 8
输出:[3,3]
解释:对于 num + 1 = 9,最接近的两个因数是 3 & 3;对于 num + 2 = 10, 最接近的两个因数是 2 & 5,因此返回 3 & 3 。
示例 2:
输入:num = 123
输出:[5,25]
示例 3:
输入:num = 999
输出:[40,25]
提示:
1 <= num <= 10^9
C++
class Solution {
public:
vector<int> closestDivisors(int num)
{
vector<int> res={1,num+1};
int val=(int)sqrt(num+2);
for(int i=val;i>=1;i--)
{
int flag=0;
if(0==(num+1)%i)
{
int left=i;
int right=(num+1)/i;
if(abs(left-right)<abs(res[0]-res[1]))
{
res[0]=left;
res[1]=right;
flag=1;
}
}
if(0==(num+2)%i)
{
int left=i;
int right=(num+2)/i;
if(abs(left-right)<abs(res[0]-res[1]))
{
res[0]=left;
res[1]=right;
flag=1;
}
}
if(flag)
{
break;
}
}
return res;
}
};