Как возвести массив в квадрат php
(PHP 4, PHP 5, PHP 7, PHP 8)
pow — Возведение в степень
Описание
pow ( mixed $num , mixed $exponent ): int | float | object
Возвращает num , возведённое в степень exponent .
Замечание:
Вместо функции можно использовать оператор **.
Список параметров
Возвращаемые значения
Основание num возведённое в степень exponent . Если оба аргумента — неотрицательные целые и результат может быть представлен как целое, то возвращаемый результат будет типа int . В ином случае результат будет типа float .
Примеры
Пример #1 Примеры использования pow()
var_dump ( pow ( 2 , 8 )); // int(256)
echo pow (- 1 , 20 ); // 1
echo pow ( 0 , 0 ); // 1
echo pow ( 10 , — 1 ); // 0.1
echo pow (- 1 , 5.5 ); // NAN
?>
Примечания
Замечание:
Функция преобразует все входные значения, даже нескалярные, к числовым, что может привести к странным результатам.
Смотрите также
- exp() — Вычисляет степень числа e
- sqrt() — Квадратный корень
- bcpow() — Возведение в степень чисел с произвольной точностью
- gmp_pow() — Возводит число в степень
User Contributed Notes 6 notes
11 years ago
Many notations use «^» as a power operator, but in PHP (and other C-based languages) that is actually the XOR operator. You need to use this ‘pow’ function, there is no power operator.
i.e. 3^2 means «3 XOR 2» not «3 squared».
It is particular confusing as when doing Pythagoras theorem in a ‘closet points’ algorithm using «^» you get results that look vaguely correct but with an error.
Как возвести массив в квадрат php
Это довольно простая функция, первым аргументом идет число, которое мы хотим возвести в квадрат в php.
А вторым аргументом устанавливаем число 2 — это и будет означать, что мы хотим возвести число в квадрат в php!
Пример использования функции возведения в квадрат в php?
Давайте возведем в квадрат в php число два, как вы наверное знаете, если возвести число 2 в квадрат, то будет 4 — вот и проверим!
Нам понадобится функция pow();
Внутри функции «pow()» ставим две двойки через запятую :
И выводим это с помощью echo:
echo pow(2, 2);
Разместим приведенный код прямо здесь:
Дан массив из 15 целых чисел из интервала от -15 до 15, возвести в квадрат отрицательные элементы массива
Дан массив A(7). Все отрицательные элементы массива возвести в квадрат
Дан массив A(7). Все отрицательные элементы массива возвести в квадрат, из положительных элементов.
Дан массив Y. Все положительные элементы массива возвести в квадрат, а отрицательные в куб
Задача 9. Дан массив Y. Все положительные элементы массива возвести в квадрат, а отрицательные в.

Отрицательные элементы массива возвести в квадрат
Здраствуйте! Помогите пожайлуста решить задачки, очень срочно надо. Огромное спасибо! Домашнее.

Возвести в квадрат отрицательные элементы массива
Возвести В квадрат отрицательные элементы массива В(7)
539 / 473 / 187
Регистрация: 11.12.2013
Сообщений: 2,477

Сообщение было отмечено Kudaibergen tak как решение
Решение
1 2 3
for i:=Low(a) to High(a) do if a[i]0 then j:=a[i]*a[i];
возвели и куда их девать дальше?
Пирамидальное возведение в квадрат больших чисел
Есть алгоритм быстрого возведения в квадрат произвольных чисел в системе счисления по основанию b (не обязательно b = 2 или b = 2^k ). Этот алгоритм далее используется при возведении в степень методом последовательного возведения в квадрат и в идеале должен работать даже с 2048-битными числами. У меня не получается его реализовать, я не знаю, как хранить эти числа, как извлекать из них цифры, как умножать такие числа при помощи сдвигов, как вычислять пары и тройки (u, v) и (c, u, v). Использование переноса намекает на удобство реализации на ассемблере, но совершенно непонятно, как организовать данные в этом алгоритме, и как выполнить пункт 2.3. Попытка реализации:
#include // Вход: массив цифр числа x по основанию b // Выход: массив y длины 2 * xlen, содержащий цифры x^2 // b - основание системы счисления, xlen - длина массива x void fast_square(char x[], char y[], int b, int xlen) < int i, j, c, u, v; int uv, cuv; for(i = 0; i > > int main()

Алгоритм: ссылка Еще одна ссылка на рсдн, где пытались написать реализацию, но не написали
Отслеживать
5,188 18 18 серебряных знаков 40 40 бронзовых знаков
задан 21 фев 2016 в 8:38
2,465 2 2 золотых знака 30 30 серебряных знаков 48 48 бронзовых знаков
Т. к. вы пытаетесь добиться лучшей производительности, то могу посоветовать использовать unsigned int вместо char — единицей вычисления является машинное слово, а не один байт, к тому же при использовании знакового типа могут возникнуть проблемы. Для хранения использовать массив. Для арифметических операций представьте как это всё вычисляет машина, придётся это реализовать через «умножение(и не только) в столбик», самому следить за переносами и прочим.
22 фев 2016 в 9:57
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
UPD 26.10.2017
Вывод алгоритма
Пусть n = b02 0 + b12 1 + b22 2 + . + bi-12 i-1 ,
тогда n 2 = (b02 0 + b12 1 + b22 2 + . + bi-12 i-1 ) 2 , где i — разрядность числа n.
Однако jk+2 k >> 2) k & 0b111. 100 = jk & (-4) (сброс нулевого и первого битов), поэтому:
Программная реализация для чисел формата integer
В программе (на языке PHP) алгоритм пирамидального возведения в квадрат реализован в виде функции pow2() и протестирован для чисел формата integer. Функция pow2($i) в 2.5 раза проигрывает по времени стандартной процедуре pow($i, 2) , использующей аппаратное умножение, что можно считать хорошим результатом. В 64-битовой версии PHP7 проигрыш больше (~10 раз).
define("N", 99); // Количество точек в тестовом массиве. define("PR", 1); // PR=0 - тест производительности. // Вывод одномерного массива function print_1d($text, $v) < $eps = 1e-7; print "$text"."["; $cnt = -1; foreach($v as $key =>$item)< if(++$cnt) print ", "; $flag = true; if($cnt && !($cnt%5)) print"
"; print ""$key"=>"; if(abs((int)$item - $item) > $eps)< printf("%.3f", $item); >else < print $item; >> print "], "; > // Пирамидальное возведение в квадрат function pow2($n) < if($n < 0) $n = -$n; $res = 0; for($j = $n 1; $j >>= 1, $sh += 2) < $res += ($j & 2) ? ($j & -4 | 1) return $res; > $test = []; for($i = 0; $i < N; $i++)< $test[] = mt_rand(-9999, 9999); >$time_start = microtime(true); $pow2_ = []; for($i = 0; $i < N; $i++)< $pow2_[$test[$i]] = pow2($test[$i]); >$time1 = microtime(true) - $time_start; $time_start = microtime(true); $pow2__ = []; for($i = 0; $i < N; $i++)< $pow2__[$test[$i]] = pow($test[$i], 2); >$time2 = microtime(true) - $time_start; printf("Возведение в квадрат для N = %d случайных точек", (int)N); if(PR > 0)< print_1d("
*** Пирамидальный алгоритм ***
Результаты:
", $pow2_); print_1d("
*** Библиотечный алгоритм ***
Результаты:
", $pow2__); >else< print("
*** Пирамидальный алгоритм ***
Время выполнения: $time1"); print("
*** Библиотечный алгоритм ***
Время выполнения: $time2"); >
Проверка на случайной выборке:
Возведение в квадрат для N = 99 случайных точек *** Пирамидальный алгоритм *** Результаты: ["8154"=>66487716, "993"=>986049, "-3669"=>13461561, "7855"=>61701025, "-7597"=>57714409, "1568"=>2458624, "-9029"=>81522841, "-6646"=>44169316, "-4934"=>24344356, "-3954"=>15634116, "-5303"=>28121809, "70"=>4900, "1661"=>2758921, "-3628"=>13162384, "5734"=>32878756, "4802"=>23059204, "-1886"=>3556996, "4269"=>18224361, "9638"=>92891044, "-7879"=>62078641, "9218"=>84971524, "-2221"=>4932841, "-7153"=>51165409, "5861"=>34351321, "-3656"=>13366336, "3058"=>9351364, "-8879"=>78836641, "593"=>351649, "329"=>108241, "-4801"=>23049601, "-8637"=>74597769, "4480"=>20070400, "9918"=>98366724, "8584"=>73685056, "-8525"=>72675625, "1920"=>3686400, "5019"=>25190361, "8697"=>75637809, "-5594"=>31292836, "-8198"=>67207204, "-7119"=>50680161, "-6288"=>39538944, "131"=>17161, "320"=>102400, "-5410"=>29268100, "9147"=>83667609, "-7411"=>54922921, "-2211"=>4888521, "3990"=>15920100, "-2077"=>4313929, "-6588"=>43401744, "-9280"=>86118400, "7357"=>54125449, "-1909"=>3644281, "6109"=>37319881, "911"=>829921, "8898"=>79174404, "-4262"=>18164644, "6537"=>42732369, "-3567"=>12723489, "1345"=>1809025, "-9229"=>85174441, "6654"=>44275716, "-9949"=>98982601, "9057"=>82029249, "-8760"=>76737600, "779"=>606841, "-9905"=>98109025, "45"=>2025, "-8160"=>66585600, "-6796"=>46185616, "-5270"=>27772900, "8019"=>64304361, "-1922"=>3694084, "1542"=>2377764, "-2489"=>6195121, "-4835"=>23377225, "4752"=>22581504, "-9621"=>92563641, "782"=>611524, "6617"=>43784689, "4506"=>20304036, "-7679"=>58967041, "-1476"=>2178576, "-6194"=>38365636, "-4385"=>19228225, "7394"=>54671236, "1323"=>1750329, "870"=>756900, "-6723"=>45198729, "4162"=>17322244, "-5436"=>29550096, "-7761"=>60233121, "-596"=>355216, "-7463"=>55696369, "356"=>126736, "429"=>184041, "-1011"=>1022121, "9811"=>96255721], *** Библиотечный алгоритм *** Результаты: ["8154"=>66487716, "993"=>986049, "-3669"=>13461561, "7855"=>61701025, "-7597"=>57714409, "1568"=>2458624, "-9029"=>81522841, "-6646"=>44169316, "-4934"=>24344356, "-3954"=>15634116, "-5303"=>28121809, "70"=>4900, "1661"=>2758921, "-3628"=>13162384, "5734"=>32878756, "4802"=>23059204, "-1886"=>3556996, "4269"=>18224361, "9638"=>92891044, "-7879"=>62078641, "9218"=>84971524, "-2221"=>4932841, "-7153"=>51165409, "5861"=>34351321, "-3656"=>13366336, "3058"=>9351364, "-8879"=>78836641, "593"=>351649, "329"=>108241, "-4801"=>23049601, "-8637"=>74597769, "4480"=>20070400, "9918"=>98366724, "8584"=>73685056, "-8525"=>72675625, "1920"=>3686400, "5019"=>25190361, "8697"=>75637809, "-5594"=>31292836, "-8198"=>67207204, "-7119"=>50680161, "-6288"=>39538944, "131"=>17161, "320"=>102400, "-5410"=>29268100, "9147"=>83667609, "-7411"=>54922921, "-2211"=>4888521, "3990"=>15920100, "-2077"=>4313929, "-6588"=>43401744, "-9280"=>86118400, "7357"=>54125449, "-1909"=>3644281, "6109"=>37319881, "911"=>829921, "8898"=>79174404, "-4262"=>18164644, "6537"=>42732369, "-3567"=>12723489, "1345"=>1809025, "-9229"=>85174441, "6654"=>44275716, "-9949"=>98982601, "9057"=>82029249, "-8760"=>76737600, "779"=>606841, "-9905"=>98109025, "45"=>2025, "-8160"=>66585600, "-6796"=>46185616, "-5270"=>27772900, "8019"=>64304361, "-1922"=>3694084, "1542"=>2377764, "-2489"=>6195121, "-4835"=>23377225, "4752"=>22581504, "-9621"=>92563641, "782"=>611524, "6617"=>43784689, "4506"=>20304036, "-7679"=>58967041, "-1476"=>2178576, "-6194"=>38365636, "-4385"=>19228225, "7394"=>54671236, "1323"=>1750329, "870"=>756900, "-6723"=>45198729, "4162"=>17322244, "-5436"=>29550096, "-7761"=>60233121, "-596"=>355216, "-7463"=>55696369, "356"=>126736, "429"=>184041, "-1011"=>1022121, "9811"=>96255721],
Тестирование быстродействия (PHP5):
Возведение в квадрат для N = 100000 случайных точек *** Пирамидальный алгоритм *** Время выполнения: 1.29107379913 *** Библиотечный алгоритм *** Время выполнения: 0.49302816391
Рекомендации для алгоритма больших чисел
Работа с большими числами ограничивается следующим небольшим фрагментом:
for($j = 2*$n, $sh = 0; $j > 1; $j >>= 1, $sh += 2) < if($j & 2)< $res += ($j ^ 3 | 1) >
Рекомендации для больших чисел:
- Формат чисел — двоичный. При использовании массива слов возникнут проблемы со знаковыми битами и хранением реальной длины числа. Более гибким является символьный формат с кодированием и декодированием через функции chr() и ord() , поскольку в нём имеется доступ к каждому байту.
- При сравнении $j > 1 достаточно длины чисел в битах. При тестировании бита $j & $2 и формировании нулевого и первого битов достаточно использовать только младший фрагмент числа.
- Операции сдвига и суммирования для $n должны быть реализованы в полном объёме.
