找出一个数的两个因数,它们彼此相似或接近
Find two factors of a number, which are similar or close to each other
给定一个数字 x
,我如何找到两个数字 y
和 z
,使得 x = y * z
和 y==Z
或 [=12] =] 和 z
很接近?另外 x
,y
,z
是 Integers
.
示例:
x = 16484, y=z=128; x=4096, y=z=4096; x=8192, y=64, z=128
我能想到的最简单的方法是使用质因数分解,然后对列表进行排序,并将彼此的值乘以 y,其余乘以 z。然后,您应该拥有尽可能接近的两个因素。可能有更有效的方法来做到这一点,但我现在想不出一个。
素因数分解编程示例:
http://www.geeksforgeeks.org/print-all-prime-factors-of-a-given-number/
示例:x = 24, 24 = 2 * 2 * 2 * 3, y = 2 * 2 和 z = 2 * 3。所以 x = y(4)*z(6) = 24
编辑:
我意识到这是行不通的,因为如果你有数字 2,2,731,z 和 y 的正确值将是 4 和 731,而不是我的解决方案给出的 2 和 1462。也许有人可以就如何解决这个问题提出建议。
编辑2:
不确定是否正确,但您可以先按最大素数对它们进行排序,然后将两个最大素数放入 y 和 z 中。然后每个后续素数将乘以 y 或 z 的最小值。我不确定这个解决方案是否 100% 有效,但我在纸上尝试了几个案例,它似乎足够好。在 2 到 1 000 000 之间对其进行了测试,此方法适用于这些值。
考虑以下因素:
for (int i=sqrt(x); i>=1; --i)
{
if ( x % i == 0 )
{
cout << " y = " << i << endl;
cout << " z = " << x / i << endl;
break;
}
}
这能达到目的吗?你能想到任何可能无效的测试用例吗?
给定一个数字 x
,我如何找到两个数字 y
和 z
,使得 x = y * z
和 y==Z
或 [=12] =] 和 z
很接近?另外 x
,y
,z
是 Integers
.
示例:
x = 16484, y=z=128; x=4096, y=z=4096; x=8192, y=64, z=128
我能想到的最简单的方法是使用质因数分解,然后对列表进行排序,并将彼此的值乘以 y,其余乘以 z。然后,您应该拥有尽可能接近的两个因素。可能有更有效的方法来做到这一点,但我现在想不出一个。
素因数分解编程示例: http://www.geeksforgeeks.org/print-all-prime-factors-of-a-given-number/
示例:x = 24, 24 = 2 * 2 * 2 * 3, y = 2 * 2 和 z = 2 * 3。所以 x = y(4)*z(6) = 24
编辑: 我意识到这是行不通的,因为如果你有数字 2,2,731,z 和 y 的正确值将是 4 和 731,而不是我的解决方案给出的 2 和 1462。也许有人可以就如何解决这个问题提出建议。
编辑2: 不确定是否正确,但您可以先按最大素数对它们进行排序,然后将两个最大素数放入 y 和 z 中。然后每个后续素数将乘以 y 或 z 的最小值。我不确定这个解决方案是否 100% 有效,但我在纸上尝试了几个案例,它似乎足够好。在 2 到 1 000 000 之间对其进行了测试,此方法适用于这些值。
考虑以下因素:
for (int i=sqrt(x); i>=1; --i)
{
if ( x % i == 0 )
{
cout << " y = " << i << endl;
cout << " z = " << x / i << endl;
break;
}
}
这能达到目的吗?你能想到任何可能无效的测试用例吗?