Задача. Рассмотрим делители числа 30: 1, 2, 3, 5, 6, 10, 15, 30. Можно заметить, что для каждого делителя d выполняется: d + 30 / d — является простым числом. Например, d=2: 2 + 30 / 2 = 17 — простое
Найдите сумму всех натуральных чисел n, не превышающих 100 000 000 таких, что для любого делителя d числа n, число d + n / d является простым. (т.е. сумму таких чисел, которые обладают свойствами как число 30 из примера выше)
Вот, что я написал:
function result($i, $num)
{
return $i + $num / $i; //Вычисляю
}
function isPrime($num)
{
if (gmp_prob_prime($num) == 2) //Проверяю, является ли простым
return true;
}
$finish = 6; //Конечное число
$data = [];
$numbers = [];
for ($NUMBER = 1; $NUMBER <= $finish; $NUMBER++) {
for ($i = 1; $i <= $NUMBER; $i++) {
$result = result($i, $NUMBER);
if (is_integer($result) && isPrime($result)) {
$data[] = $i;
$numbers[] = $NUMBER;
}
}
}
foreach ($numbers as $num) {
echo $num;
}
echo "<br>";
foreach ($data as $nums) {
echo $nums;
}
В случае с 6, подходят 1, 2 и 6. Надо исключить 4 и все похожие числа, у которых не все делители подходят под это условие.
function result($i, $num)
{
return $i + $num / $i; //Вычисляю
}
function isPrime($num)
{
if (gmp_prob_prime($num) == 2) //Проверяю, является ли простым
return true;
}
$finish = 6; //Конечное число
for ($NUMBER = 1; $NUMBER <= $finish; $NUMBER++) {
$is = true;
for ($i = 1; $i <= $NUMBER; $i++) {
$result = result($i, $NUMBER);
if (is_integer($result)&&!isPrime($result)) { // это делитель и формула дала составное число?
$is = false;
break; // это не то, что нам нужно, дальше не ищем
}
}
if($is) echo $NUMBER; // это то, что нам нужно
}
А вообще, это парабола: -d^2+b*d-x=0 И если мы найдем решение для x от 1 до 100 000 000, где b будет составным числом, то x нам не подходит. Может быть кто нибудь более сообразительный предложит чисто математическое решение?
Фрилансер или Digital-агентство - Как сделать правильный выбор?
Существует ли встроенная функция в php или что либо подобное, для того, чтобы зная MIME файла - вывести форматК примеру: