思路:
要求两个大小最接近的因子a,b,可先求出c的平方根(非完全平方数时,向上取整),然后从近似平方根开始到1进行遍历,找到第一个能整除的数,即为a,c/a即为b。
代码如下:
// Chapter11_2.cpp : Defines the entry point for the application.
// 最小的因子对差
// 求出数字c的两个因子a和b(b>=a),使得a*b=c且使b-a值尽量小
#include "stdafx.h"
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int c,a,b;
cout << "输入一个整数c:";
cin >> c;
//求平方根(向上取整)
int approximate_sqrt = sqrt(c);
//从近似平方根开始到1进行遍历
for(int i=approximate_sqrt;i>0;i--)
{
a = i;
if(c%a == 0)
{
b = c/a;
cout << c << "的最小因子对差为:" << a << ' ' << b << endl;
break;
}
}
system("pause");
return 0;
}
运行结果如下: