我需要一些用PHP编写的函数来使用答案生成一个简单的数学方程式。例如:
输入:
6688650
输出:(或类似的东西)
75 * 34 * (1 * (43 * 61))
输入:
249366
输出:(或类似的东西)
(((99 + 87) + 95 * 99) * 26)
我想出了这个素数因子生成器,但我需要一种方法将因子转换为像(((99 + 87) + 95 * 99) * 26)
function primefactor($num) {
$sqrt = sqrt($num);
for ($i = 2; $i <= $sqrt; $i++) {
if ($num % $i == 0) {
return array_merge(primefactor($num/$i), array($i));
}
}
return array($num);
}
使用数字生成器:
do {
$num = mt_rand(6542,89523498);
} while (is_prime($num) & count(primefactor($num)) > 5);
这让我有类似的事情:
Original: 78973465
Array ( [0] => 349 [1] => 271 [2] => 167 [3] => 5 )
答案 0 :(得分:1)
将整数转换为素数因子数组。
您可以组合您的素因子,但是您可以选择生成方程式。但是,这不是1:1
函数(除非数字是素数)。因此,您可以创造性地了解如何将数字组合在一起。
在这个实现中,我决定生成随机加法和素数组合以形成联合素数。
创建一种有效的素数分解方法会使问题变得复杂一些。我在这里写了一个非常简单的,很可能,它会满足你的需求。但是,如果您需要一种更快的方法(或者如果您要处理更大的数字或更多的数字),您可能需要进行一些独立的研究。我用Google搜索并this suggestion出现了。
<?php
$n = 6688650;
//generates a list of all factors
function primefactor($num) {
$sqrt = sqrt($num);
for ($i = 2; $i <= $sqrt; $i++) {
if ($num % $i == 0) {
return array_merge(primefactor($num/$i), array($i));
}
}
return array($num);
}
//generates multiplication equation
// Let's scramble those numbers
$factors = primefactor($n);
//let's randomly combine some of our prime factors
for ($i = 0, $len = count($factors); $i < $len; $i++) {
if (mt_rand(0,1)) {
$keys = array_rand($factors,2);
$to = $factors[$keys[0]]*$factors[$keys[1]];
array_push($factors, $to);
unset($factors[$keys[0]]);
unset($factors[$keys[1]]);
}
}
//now, let's insert some random addition
foreach ($factors as $key => $value) {
if (mt_rand(0,1)) {
$delta = mt_rand(1,$factors[$key]-1);
$factors[$key] = '(' . ($value-$delta) . '+' . $delta . ')';
}
}
//output the information
$myValues = array_values($factors);
shuffle($myValues);
echo join('*',$myValues);
?>
5185*(145+1145)
3*(59+27)*(23+62)*(269+36)
1462*(26+35)*5*5*(2+1)