<?php
$n = 5 ; // Само число до которого нужно вывести все простые числа
$f = 0 ; // Начальное значение счётчика -числа делителей
$k=1; // Начальное значение параметра $k для цикла while
$e=1; // Начальное значение переменной $e для цикла for
// Пояснение к выводу работы программы :
echo "()-в скобках значения параметра \$e-1 , а в ||
значения простых делителей <BR>" ;
//Выполняем цикл до тех пор пока $k не равно $n-заданному числу до
// которого необходимо вывести все простые числа
while ( $k !== $n )
{
// Цикл перебирает все числа до числа "первого ряда"
for ( $e ; $e < $k ; $e++ )
$e = $k;
{
echo "(",$e,")","<BR> ";
// Внутренний цикл , проверяющий простое ли число
for ($i=1 ; $i <= $e ; $i++)
{
// Если наше число делится на любое натуральное число меньшее
// или равное ему без остатка то это делитель
if ($e % $i == 0 )
{
// Число делителей увеличивается на единичку
$f++ ;
}
}
// Если число натуральных делителей меньше двух или равно двум ,
// то это простое число.
if ($f<=2)
{
// Выводим наше простое число
echo "Вот они наши простые делители : ","|",$e ."|", " ";
}
// Обнуляем количество делителей , теперь уже для другого числа
$f =0 ;
}
$k++;
}
?>
vedro-compota
Fri, 09/18/2015 - 10:13
Permalink
у вас отсутствуют комментарии
у вас отсутствуют комментарии к двум внешним циклам:
объясните - зачем вы их используете.
_____________
матфак вгу и остальная классика =)
fgh
Fri, 09/18/2015 - 11:14
Permalink
Решение данной задачи кроется
Решение данной задачи кроется в 3 циклах :
Например "$n"=10 , то "$k" проходит значения 1,2,3,4,5,6,7,8,9,10 - это "числа первого ряда"
так вот $e принимает значения всех натуральных чисел до из ряда "чисел первого ряда"
и каждое число "второго ряда" проверяется на "простоту"
vedro-compota
Fri, 09/18/2015 - 11:19
Permalink
Решение данной задачи кроется
Это я уже "понял". Объясните первые два.
_____________
матфак вгу и остальная классика =)
vedro-compota
Fri, 09/18/2015 - 11:33
Permalink
// Первый цикл while
во-первых что такое:
???
во вторых - а зачем, собственно, делать это "прогонку отборов"? Как она связана со вторым циклом и с условие задачи.
вот это чётко и понятно. Перебор мы делаем потому, что ищем среди них.
_____________
матфак вгу и остальная классика =)
fgh
Fri, 09/18/2015 - 11:51
Permalink
Осуществление прогонки чисел
Осуществление прогонки чисел - это процесс перебора по порядку натуральных чисел до заданного числа n (p.s. с'умничал не к месту :)
Да, можно при желании оптимизировать решение задачи и без этого цикла , но в для обучения применению как можно больших возможностей циклов , стремлению ими виртуозно владеть , я решил написать "приналепить " как можно большее количество разных циклов для демонстрации самому себе их возможностей.
vedro-compota
Fri, 09/18/2015 - 12:02
Permalink
то есть 1-ый цикл:
то есть 1-ый цикл:
при этом второй:
То есть: ...я думаю, вы поняли. Перепишите код оптимальным образом (имеет место быть жуткое дублирование).
Это желание никогда не должно оставлять вас =)
P. S.
Если вы про "научный стиль" - то к месту. Старайтесь чётко излагать мысли.
_____________
матфак вгу и остальная классика =)
fgh
Fri, 09/18/2015 - 12:07
Permalink
Ценные замечания . )
Ценные замечания . ) Программист должен всегда всё оптимизировать. Это точно . Сейчас
vedro-compota
Fri, 09/18/2015 - 11:16
Permalink
$e = 1;
$e-1 - это невменяемая конструкция, я даже точно не могу сказать фиксируется ли это значение один раз в начале как
или же изменяется с каждым витком.
А не могу я сказать, потому что так обычно не пишут, а не пишут так потому, что это не наглядно и сложно для восприятия. Поэтому код необходимо переписать, для начала ответив на вопрос выше.
_____________
матфак вгу и остальная классика =)
fgh
Fri, 09/18/2015 - 11:19
Permalink
Я предлагаю не раскрывать до
Я предлагаю не раскрывать до конца тайны природы ))))))))))))))))))))))))))))))))
vedro-compota
Fri, 09/18/2015 - 11:21
Permalink
да $e=0
значит $е изменяется с каждым витком - чтобы выяснить это, необходимо просто выводить переменную на экран (в данный момент подобное выяснение основной задачей не является).
_____________
матфак вгу и остальная классика =)
fgh
Fri, 09/18/2015 - 11:30
Permalink
Спасибо за совет. Я так и
Спасибо за совет. Я так и сделал. Переменная $e выводится в скобочках "( ) ", а сами простые делители в знаках модуля " | | "
vedro-compota
Fri, 09/18/2015 - 12:40
Permalink
опять по циклам
какие "простые делители" ? о них в задаче ни слова.
Какого "первого ряда"?? Формулируйте мысли ясно.
_____________
матфак вгу и остальная классика =)
math2
Fri, 09/18/2015 - 18:23
Permalink
fgh,
fgh,
единица не относится к простым числам. Нет необходимости выводить её.
math2
Fri, 09/18/2015 - 19:15
Permalink
// Цикл перебирает все числа
Это не решение задачи 19, это решение задачи 18.
Этот цикл ничего не перебирает. Каждый раз выполняется лишь одна его итерация, так как
\$e отстаёт от \$k ровно на 1.
Более того, это ведёт к ошибке. Сделайте \$n = 30.
Программа выдаст простые числа лишь до 23 включительно. Почему?
Для того, чтобы тело цикла
было выполнено при (\$e == 29), нужно, чтобы было (\$e меньше \$k),
то есть \$k должен быть равен хотя бы 30. Но условие цикла
не позволит это получить.
С большим успехом можно заменить эти строки на
и программа отработает точно так же, только без ошибки.
vedro-compota
Mon, 09/21/2015 - 16:00
Permalink
Это не решение задачи 19, это
действительно...:
в то время как в задаче указано что нужно вести конкретное кол-во простых чисел.
_____________
матфак вгу и остальная классика =)
fgh
Wed, 09/23/2015 - 07:51
Permalink
Исправил . спасибо .
Исправил . спасибо .
vedro-compota
Wed, 09/23/2015 - 12:06
Permalink
что вы исправили?
что вы исправили?
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 09/21/2015 - 16:05
Permalink
перед тем как перерешивать
_____________
матфак вгу и остальная классика =)