我需要一个用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 )
发布于 2017-11-17 20:14:23
概念
1:1
函数(除非数字是素数)。所以,你可以创造性地把这些数字组合在一起。在这个实现中,我决定产生随机加法,并将素数组合成同素.
备注
创建一种有效的素数分解方法会使问题变得更加复杂。我在这里写了一个非常简单的,很有可能,它将适合你的需要。但是,如果您需要一种更快的方法(或者您正在处理的是大得多的数字或更多的数字),那么您可能需要进行一些独立的研究。我搜索了一下,这一建议出现了。
代码
<?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)
https://stackoverflow.com/questions/47362338
复制相似问题