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

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

 

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

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

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

Имя участника ыыыы=)
С условиями задачи можно ознакомится по ссылке.
number.php

<?php    ##Скрипт формирует самое большое простое число и записывает его в файл.
//Убираем ограничение на время выполнения скрипта,замечаем время и начинаем возводить 2 в 43112609 степень
set_time_limit(0);
$start_time=microtime(true);
$number=2;
//В цикле умножаем число 2 на само себя требуемое число раз
for($i=43112609;$i>1;$i--)
{
    
//Умножаем методом "столбика",семью восемь - пятьдесят шесть,шесть пишем,пять в уме =))
    //В начале каждой итерации обнуляем переменные,в конце итерации запоминаем получившийся результат
    
$inmem=0;
    
$result="";
    
//По очереди,начиная с конца,вытаскиваем по цифре,умножаем на 2,"пишем" в $result,"запоминаем" в $inmem
    
for($x=1;$x<=strlen($number);$x++)
    {
        
$temp=substr($number,strlen($number)-$x,1)*2+$inmem;
        
//Если итерация последнняя,дописываем в $result,если нет,то разделяем число.
        
if($x==strlen($number))
            
$result=$temp.$result;
        else
        {
            
$result=substr($temp,-1).$result;
            
$inmem=$temp>substr($temp,0,strlen($temp)-1) : 0;
        }
    }
    
$number=$result;
}
//Вычитаем из числа 1
$last_dig=substr($number,-1)-1;
$number=substr($number,0,$x-1).$last_dig;
//Формирование числа завершено,считаем время,далее записываем в файл,также засекая время
$end_time=microtime(true);
$time=$end_time-$start_time;
echo 
"Время формирования числа:$time секунд.<br />";

$start_time=microtime(true);

$f=fopen("number.txt","w+") or die("Ошибка открытия файла");
fwrite($f,$number);
fclose($f);

$end_time=microtime(true);
$time=$end_time-$start_time;
echo 
"Время записи числа в файл:$time секунд.<br />";
?>


num_digital.php

<?php ##Подсчет кол-ва цифр в самом большом простом числе
//Одна цифра занимает один байт,слеодвательно размер файла в байтах и будет ответом.
$num_digital=filesize("number.txt");
echo 
$num_digital "Количество цифр в числе: $num_digital." "Ошибка!";
?>

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

Ответ правильный. Однако, даже запуская скрипт вне браузера и выставляя ему повышенный приоритет практически невозможно дождаться. Это связана с интерпретируемостью языка PHP и представлением строк - лучше перекладывать рутинные операции с большими числами на быстрые и специализированные средства, в частности на расширение GMP.

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

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