• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Прокомментируйте, Пожалуйста, Код Программы.

  • Автор темы Deterokus
  • Дата начала
D

Deterokus

Доброго дня всем!
Перед Вами - 2 программы - 1 шифрует текст методом гаммирования, вторая - генератор простых чисел.
Если не трудно - помогите дать комментарий к некоторым блокам и переменным ))
1 архив - необходимо объяснить, что собой представляет переменная l и для чего она используется.
2 архив - необходимо объяснить блок:

C++:
if (p!=q)
{
k=sqrt(p);
kk=k;
for (b=2;b<=kk;b++)
{
if (p%b==0)
{
i++;
break;
А конкретнее - для чего производится операция извлечения квадратного корня в алгоритме нахождения простых чисел(решето Эратосфена)

Посмотреть вложение 1.rar
Посмотреть вложение 2.rar

Добавлено: Остальные копии темы удалите, пожалуйста
 
D

Deterokus

Уточняю вопрос по 2 программе - Почему используется именно извлечение квадратного корня, а не что-то другое?
 
Q

qqwertty

Если я правильно вопрос понял, чтобы узнать простое ли число можно в цикле делить на все подряд от 2-ки до квадратного корня из этого числа, потому что дальше уже не имеет смысла.
Например, число 26 делится максимум на 5 ((int)sqrt(26) = 5), на 6 и дальше, даже если оно разделится, то точно будет делиться на какое либо число до 5-ки. 26 = 2*13.

Надеюсь понятно объяснил)
 
D

Deterokus

А почему дальне не имеет смысла? Как это доказывается? Если честно, пример не очень понял, но нашёл нечто полезное в википедии.

Для нахождения всех простых чисел не больше заданного числа n, следуя методу Эратосфена, нужно выполнить следующие шаги:
1.Выписать подряд все целые числа от двух до n (2, 3, 4, …, n).
2.Пусть переменная p изначально равна двум — первому простому числу.
3.Считая от p шагами по p, зачеркнуть в списке все числа от 2p до n кратные p (то есть числа 2p, 3p, 4p, …)
4.Найти первое не зачеркнутое число, большее чем p, и присвоить значению переменной p это число.
5.Повторять шаги 3 и 4 до тех пор, пока p не станет больше, чем n

Теперь все не зачеркнутые числа в списке — простые.
На практике, алгоритм можно несколько улучшить следующим образом. На шаге № 3, числа можно зачеркивать, начиная сразу с числа p^2, потому что все составные числа меньше его уже будут зачеркнуты к этому времени. И, соответственно, останавливать алгоритм можно, когда p^2 станет больше, чем n.

Это именно обоснование или можно сказать как-то по-другому?
 
Q

qqwertty

Как доказывается я не знаю. Попробую проще. У составного числа(не простого) минимум 2 простых множетеля, так вот чтобы найти хотябы 1, достаточно пройти до корня из числа, потому что максимумальный возможный (простой!!!) множетель равен корню из числа, пример 25. Sqrt(25) = 5; 121 (sqrt(121) = 11); 144 (sqrt(144) = 12 но до 12 алгоритм и не дойдет) Множители за корнем, если будут даже простыми, то найдется еще 1 множитель который будет меньше корня из числа, арифметика ёмоё) Еще пример, если число 401 не разделится ни на одно число до 20, то на 21 оно точно не разделится, потому что 401/21 = должно быть меньше 20, т.к 21х20=420
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!