Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 001 на задачу N 23
 
 автор: cheops   (13.10.2008 в 00:25)   письмо автору
 
 

Имя участника Eugene77
С условиями задачи можно ознакомится по ссылке.
<?php
// Вывод в файл (?file=yes) и определение длины (?digits=yes) самого большоги известного простого числа. Author => "Eugene77"
if($_GET['file']!='yes' and $_GET['digits']!='yes') exit('Надо указать ?file=yes или/и ?digits=yes  <br>');
set_time_limit(300);
$t time();
// В начале получим число содержащее 43112609 нулей и одну единицу в начале (в двоичном исчислении)
$f gmp_pow(243112609);
// Вычитая 1 получим число состоящее только из 43112609 бинарных единиц
$f gmp_sub($f1);
// Превратим его в строку 
$st gmp_strval($f);
// Освободим память и выведем информацию о времени работы
unset($f); 
$t_form time(); 
echo 
"<br>Потребовалось   ".($t_form-$t).  "  секунд для получения десятичного представления числа<br>";

if(
$_GET['file']=='yes'){
    
// Запишем число в файл
    
file_put_contents("longest_prime_number.txt"$st) or exit("<br> Не могу записать файл <br>");
    
// Выведем информацию о времени работы
    
$t_output time(); echo "<br>Потребовалось   ".($t_output $t_form).  "  секунд для записи в файл десятичного представления числа<br>";
}

if(
$_GET['digits']=='yes'){
    
// Определим длину
    
$len strlen($st);
    echo 
"<br>Длина десятичного представления числа  $len <br>";
    
// Выведем информацию о времени работы
    
$t_output time(); echo "<br>Потребовалось   ".($t_output $t_form).  "  секунд для определения длины десятичного представления числа<br>";
}

echo 
"<br>Потребовалось   ".($t_output $t).  "  секунд для всей работы скрипта<br>";

?>

  Ответить  
 
 автор: cheops   (13.10.2008 в 00:44)   письмо автору
 
   для: cheops   (13.10.2008 в 00:25)
 

Совершенно правильный ответ, причем судя по всему один из самых быстрых в PHP. Альтернативный вариант с использованием GMP-расширения, основанный на формировании строки из единиц 111 ... 111 с последующим преобразованием их в десятичное число занимает в три раза больше времени.

Скрипт безупречный - правильный, быстрый, маленький, легко читается и без хитростей. Браво. Вас могло бы обыграть только решение, где длина десятичного числа вычисляется аналитически, а не в лоб на основании сгенерированного файла.

  Ответить  
 
 автор: ddhvvn   (13.10.2008 в 11:31)   письмо автору
 
   для: cheops   (13.10.2008 в 00:44)
 

-

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования