PHP从答案生成数学方程式

时间:2017-11-18 03:57:40

标签: php math equation

我需要一些用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 )

1 个答案:

答案 0 :(得分:1)

概念

  1. 将整数转换为素数因子数组。

  2. 您可以组合您的素因子,但是您可以选择生成方程式。但是,这不是1:1函数(除非数字是素数)。因此,您可以创造性地了解如何将数字组合在一起。

  3. 在这个实现中,我决定生成随机加法和素数组合以形成联合素数。

    注意

    创建一种有效的素数分解方法会使问题变得复杂一些。我在这里写了一个非常简单的,很可能,它会满足你的需求。但是,如果您需要一种更快的方法(或者如果您要处理更大的数字或更多的数字),您可能需要进行一些独立的研究。我用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)