目标:以有效的方式找到数字的最大素因数。
找到最大素因数是一个非常简单的概念。假设数字是 1092。1092 的所有质因数都是 2, 2, 3, 7, 13。因此,最大的质因数是 13。要找到它,可以使用以下算法:
number = num
步骤1:
如果num可被2整除,则存储最大素因子为2。
继续划分num,直到它不能被2整除。
之后每个分区,将num更新为num/2。
步骤2:
在这一点上,num必须是奇数。
从num的3到平方根开始,如果可分割、分割和更新num以及更新最大素数。
步骤3:
如果修改后的num大于2、用num.更新最大素数。
查找数字的最大质因数
下面的示例说明了上述算法。
<?php
function MaxPrime($num) {
$CurrMaxPrime = -1;
//如果$num能被2整除,则存储$CurrMaxPrime
//为2.继续除$num,直到不能被2整除,每次除完后更新
//$num 为 $num/2。
if($num % 2 == 0) {
$CurrMaxPrime = 2;
while($num % 2 == 0){
$num = $num/2;
}
}
//此时$num一定是奇数。从3...开始
//到 $num 的平方根,如果可整除,则除以
//$num,并更新$CurrMaxPrime
for($i = 3; $i <= sqrt($num); $i += 2) {
while($num % $i == 0) {
$CurrMaxPrime = $i;
$num = $num/$i;
}
}
//如果修改后的$num大于2,
//用$num更新$CurrMaxPrime
if ($num > 2)
$CurrMaxPrime = $num;
return $CurrMaxPrime;
}
$x = 42;
$y = 1092;
$z = 695467363456;
echo "{$x} 最大质因数是: "
.MaxPrime($x)."\n";
echo "{$y} 最大质因数是: "
.MaxPrime($y)."\n";
echo "{$z} 最大质因数是: "
.MaxPrime($z)."\n";
?>
上面的代码将给出以下输出:
42 最大质因数是: 7
1092 最大质因数是: 13
695467363456 最大质因数是: 5433338777