Сортировка чисел по условию

389
20 февраля 2017, 19:50

Задача. Рассмотрим делители числа 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 и все похожие числа, у которых не все делители подходят под это условие.

Answer 1
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 нам не подходит. Может быть кто нибудь более сообразительный предложит чисто математическое решение?

READ ALSO
Переконвертировать дату в MySql timestamp

Переконвертировать дату в MySql timestamp

Дата приходит с формы таким форматом

390
Данные MIME в формат

Данные MIME в формат

Существует ли встроенная функция в php или что либо подобное, для того, чтобы зная MIME файла - вывести форматК примеру:

245
Загрузить содержимое php через jquery

Загрузить содержимое php через jquery

Есть следующий скрипт:

361