Заполните недостающие команды для программы:Даны два числа А=1 и В=10. Выводятся все нечетные числа и их кубы в интервале от А до В. Запишите пропущенные команды через запятую
Учитывая, что 50 - это очень немного (50-е простое число всего лишь 229), можно придумать всё что угодно (даже ужасающе неэффективное). Можно просто перебирать все числа, начиная с двойки, и каждое делить на все меньшие его, начиная с двойки. Если хоть на одно разделится - не простое, иначе простое. Попутно подсчитывая число простых чисел, N-е найти не составит труда.
Псевдокод: ввод N i = 2 counter = 0 нц для j = 2..(i - 1) если i mod j = 0 тогда увеличить i на 1 следующая итерация внешнего цикла увеличить counter на 1 если counter = N тогда вывод i завершение работы программы увеличить i на 1 кц
Дальше можно изменять эту программу, оптимизировать. Например, известно, что меньший собственный делитель любого составного числа не превосходит корня из этого числа, следовательно, можно во внутреннем цикле делать перебор не до i - 1, а до [sqrt(i)]. Другое полезное наблюдение может заключаться в том, что все простые числа кроме 2 имеют вид 6m - 1 или 6m + 1 (остальные не подходят: очевидно, 6n делится на 6, 6n +-2 четные числа, а 6n + 3 делится на 3). Это наблюдение позволит примерно в три раза сократить число итераций внешнего цикла. Наконец, можно сохранять все встретившиеся простые числа в массив, и затем проверять, делится ли текущее число на простые числа, меньшие себя: если не делится, то оно - тоже простое. Для хранения 50 маленьких натуральных чисел в памяти не нужно много места. Можно воспользоваться каким-нибудь другим алгоритмом, например, решетом Эратосфена. Но в зависимости от того, на каком языке программирования будет потом реализовываться этот алгоритм, он может записываться нетривиально. Для выполнения "на бумажке" решето Эратосфена - один из самых удобных В конце концов, можно использовать "читерский" метод - взять откуда-нибудь первые 50 простых чисел, записать их куда-нибудь, а потом просто за O(1) находить нужное число в памяти.
Вячеслав
16.04.2022
В школе учатся четыре талантливых мальчика: Иванов, Петров, Сидоров и Андреев. Один из них - будущий музыкант, другой преуспел в бальных танцах, третий - солист хора мальчиков, четвертый подает надежды как художник. О них известно следующее: 1. Иванов и Сидоров присутствовали в зале консерватории, когда там солировал в хоре мальчиков певец. 2. Петров и музыкант вместе позировали художнику. 3. Музыкант раньше дружил с Андреевым, а теперь хочет познакомиться с Ивановым. 4. Иванов не знаком с Сидоровым, так как они учатся в разных классах и в разные смены. Кто чем увлекается?
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
Заполните недостающие команды для программы:Даны два числа А=1 и В=10. Выводятся все нечетные числа и их кубы в интервале от А до В. Запишите пропущенные команды через запятую
Можно просто перебирать все числа, начиная с двойки, и каждое делить на все меньшие его, начиная с двойки. Если хоть на одно разделится - не простое, иначе простое. Попутно подсчитывая число простых чисел, N-е найти не составит труда.
Псевдокод:
ввод N
i = 2
counter = 0
нц
для j = 2..(i - 1)
если i mod j = 0 тогда
увеличить i на 1
следующая итерация внешнего цикла
увеличить counter на 1
если counter = N тогда
вывод i
завершение работы программы
увеличить i на 1
кц
Дальше можно изменять эту программу, оптимизировать. Например, известно, что меньший собственный делитель любого составного числа не превосходит корня из этого числа, следовательно, можно во внутреннем цикле делать перебор не до i - 1, а до [sqrt(i)].
Другое полезное наблюдение может заключаться в том, что все простые числа кроме 2 имеют вид 6m - 1 или 6m + 1 (остальные не подходят: очевидно, 6n делится на 6, 6n +-2 четные числа, а 6n + 3 делится на 3). Это наблюдение позволит примерно в три раза сократить число итераций внешнего цикла.
Наконец, можно сохранять все встретившиеся простые числа в массив, и затем проверять, делится ли текущее число на простые числа, меньшие себя: если не делится, то оно - тоже простое. Для хранения 50 маленьких натуральных чисел в памяти не нужно много места.
Можно воспользоваться каким-нибудь другим алгоритмом, например, решетом Эратосфена. Но в зависимости от того, на каком языке программирования будет потом реализовываться этот алгоритм, он может записываться нетривиально. Для выполнения "на бумажке" решето Эратосфена - один из самых удобных
В конце концов, можно использовать "читерский" метод - взять откуда-нибудь первые 50 простых чисел, записать их куда-нибудь, а потом просто за O(1) находить нужное число в памяти.