Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чём ошибка в этом скрипте? Программа выведения простых чисел 
:(
    Опции темы
MuradK
  Дата 14.5.2005, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 17.12.2004

Репутация: нет
Всего: нет



Код

<? 
for ($i = 0; $i < 100; ++$i)
{ for ($j = 0; $j < $i; ++$j)

if (($i%$j) !=0)
continue;
else

$flag=true;
      break;
}
}
if (!$flag)

echo ($i);
echo (" ");
}
$flag=false;
}
?>


Выодится нуль вместо простых чисел до ста smile
PM MAIL   Вверх
Mal Hack
Дата 14.5.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



В алгоритме.
Код
<?php

 for ($i = 1; $i < 100; ++$i)
  {
   $flag = FALSE;

   for ($j = 2; $j < floor($i/2); $j++)
    {
     if ( ( $i % $j ) != 0)
      {  continue;  }
     else
      {
       $flag = TRUE;
       break;
      }
    }

   if( $flag == FALSE )
    { print $i . "<br>"; }
  }

?>

PM ICQ   Вверх
MuradK
Дата 14.5.2005, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 17.12.2004

Репутация: нет
Всего: нет



Danke lehrmeister smile
А что такое "floor"?
Если не затруднит...

Это сообщение отредактировал(а) MuradK - 14.5.2005, 15:06
PM MAIL   Вверх
Mal Hack
Дата 14.5.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Округление, но в меньшую степень, т.е.
floor(4.9) - 4.
http://php.net/floor.
PM ICQ   Вверх
MuradK
Дата 14.5.2005, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 17.12.2004

Репутация: нет
Всего: нет



ОК!
Но ведь 4 не простое число smile
PM MAIL   Вверх
Mal Hack
Дата 14.5.2005, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(MuradK @ 14.5.2005, 16:34)
Но ведь 4 не простое число smile

Я в качестве примера работы floor показал.
PM ICQ   Вверх
MuradK
Дата 14.5.2005, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 17.12.2004

Репутация: нет
Всего: нет



Понятно. Спасибо.
PM MAIL   Вверх
GorD
Дата 22.5.2005, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 22.5.2005

Репутация: 1
Всего: 1



Хоть 100 и не такое уж большое число, но для ускорения поиска целых чисел в коде
Mal Hack'a можно заменить строчку

Код

for ($j = 2; $j < floor($i/2); $j++)


на строчку

Код

for ($j = 2; $j < sqrt($i); $j++)



(я новичок в PHP, поэтому я еще не разобрался со всеми функциями, поэтому взял функцию из С. Короче говоря, $j можно ограничить не половиной $i, а квадратным корнем из $i.)

Это сообщение отредактировал(а) GorD - 22.5.2005, 20:04
PM MAIL   Вверх
Mal Hack
Дата 22.5.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



GorD
ты не прав. Смотри. Что такое простое число. То, которое делится только на себя и на 1.
Т.е. мы идем в цикле с 1 до 100 (число делим на 2, 3, 4). Но смысл на идти дальше 50, т.к. мы просто повторяться будем. т.к. если 100 / 70 будет одно из чисел от 1 до 50. Поэтомы мы и делим только на число от 1 до 50.
sqrt дает совсем другой результат. При нем мы пойдем только до 10, при этом проинорировав 20.
PM ICQ   Вверх
GorD
Дата 22.5.2005, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 22.5.2005

Репутация: 1
Всего: 1



А, да, я маленько перепутал. Я вспомнил пример, когда надо узнать, простое ли данное число вот код:

к примеру, это число $p

Код

<?php
 $flag=FALSE;
 for ($i = 1; $i < sqrt($p); ++$i)  if ($p%$i==0) {ehco $p."  составное"; break; $flag=TRUE; }
 if ($flag=FALSE) ehco $p."  простое";

PM MAIL   Вверх
Bikutoru
Дата 27.5.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 8
Всего: 22



Цитата
Ты не прав. Смотри. Что такое простое число. То, которое делится только на себя и на 1.
Т.е. мы идем в цикле с 1 до 100 (число делим на 2, 3, 4). Но смысл на идти дальше 50, т.к. мы просто повторяться будем. т.к. если 100 / 70 будет одно из чисел от 1 до 50. Поэтомы мы и делим только на число от 1 до 50.
sqrt дает совсем другой результат. При нем мы пойдем только до 10, при этом проинорировав 20.


По-моему, ошибаешься ты... Смотри, если a=b*c, то
1. либо b=c=sqrt(a)
2. либо ((b < sqrt(a)) || (c < sqrt(a)) (иначе просто b*c > sqrt(a)*sqrt(a) = a ))

Так что, sqrt(a) - это здравая мысль _при больших числах_



--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Mal Hack
Дата 27.5.2005, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Bikutoru @ 27.5.2005, 16:03)
По-моему, ошибаешься ты... Смотри, если a=b*c, то
1. либо b=c=sqrt(a)
2. либо ((b < sqrt(a)) || (c < sqrt(a)) (иначе просто b*c > sqrt(a)*sqrt(a) = a ))

Так что, sqrt(a) - это здравая мысль _при больших числах_

Честно не фига не понял....
то что мы должны идти до половины числа - это точно.

Это сообщение отредактировал(а) Mal Hack - 27.5.2005, 15:08
PM ICQ   Вверх
Bikutoru
Дата 27.5.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 8
Всего: 22



Если число может быть представлено как произведение двух сомножителей, то один из них (сомножителей) _обязательно_ меньше или равен квадратному корню исходного числа, а второй сомножитель _обязательно_ больше или равен квадратному корню исходного числа. Иначе просто не может быть!

Это сообщение отредактировал(а) Bikutoru - 27.5.2005, 15:14


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Irokez
Дата 27.5.2005, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



Цитата(Mal @ 27.5.2005, 15:07)
Честно не фига не понял....
то что мы должны идти до половины числа - это точно.


Bikutoru прав, надо идти до корня от числа, т.к. число если оно не простое имеет как минимум один делитель отличный от него самого и единицы, если такой делитель существует то он будет располагаться на числовой прямой от единицы до корня данного числа
PM   Вверх
Mal Hack
Дата 27.5.2005, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Но ведь коренб может быть дробным.
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0952 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.