Мне нужна функция, написанная на 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: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)
Других решений пока нет …