Уровень B. 7. Оформите программу на языке Паскаль так, чтобы сохранилось все форматирование. 8. Выделите слова «сервер» и «клиент» в первом абзаце с тэга EM. 9. В следующих двух абзацах выделите определяемые слова («сервер» и «клиент») с тэга DFN, а английские слова – с тэга EM.
Пока мы не набрали n простых чисел, будем перебирать числа от 2 до ... и пытаться разложить их на множители.
Код вложен в ответ.
2. Решето Эратосфена
Решето Эратосфена позволяет быстро находить все простые числа на отрезке (в нашем случае x - какая-то константа).
АлгоритмПусть x равен 25.
Тогда идея такова: запишем все числа от 2 до 25.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
По умолчанию все числа помечены как простые. Конкретно здесь числа, помеченные как составные, будут показываться в нижних индексах: ₂₅
Берем первое число 2. Оно помечено как простое. От квадрата этого числа до x помечаем все числа, делящиеся на 2, как составные:
2 3 ₄ 5 ₆ 7 ₈ 9 ₁₀ 11 ₁₂ 13 ₁₄ 15 ₁₆ 17 ₁₈ 19 ₂₀ 21 ₂₂ 23 ₂₄ 25
Берем следующее число, помеченное как простое. Это 3. От квадрата этого числа до x помечаем все числа, делящиеся на 3, как составные:
2 3 ₄ 5 ₆ 7 ₈ ₉ ₁₀ 11 ₁₂ 13 ₁₄ ₁₅ ₁₆ 17 ₁₈ 19 ₂₀ ₂₁ ₂₂ 23 ₂₄ 25
Следующее простое число - 5. От квадрата пяти до x помечаем все числа, кратные 5, как составные:
2 3 ₄ 5 ₆ 7 ₈ ₉ ₁₀ 11 ₁₂ 13 ₁₄ ₁₅ ₁₆ 17 ₁₈ 19 ₂₀ ₂₁ ₂₂ 23 ₂₄ ₂₅
Квадрат всех остальных простых чисел больше x. Решето построено.
КодПеревернем массив, представляющий решето. В composite[i] хранится true, если i - составное, false иначе.
#include <bits/stdc++.h>
using namespace std;
const int x = 2000000;
bool composite[x + 1];
void calc() {
for (long long i = 2; i <= x; ++i)
if (!composite[i] && (i * i <= x))
for (long long j = i * i; j <= x; j += i)
composite[j] = true;
}
int main() {
calc();
int n;
cin >> n;
int k = 0;
for (int i = 2; i <= x && k < n; ++i)
if (!composite[i]) {
cout << i << " ";
++k;
}
cout << endl;
return 0;
}
1) tan(x*10 >0) - аргументом функции Tan(x) должно быть арифметическое, а не логическое выражение.
2) false V not(true) - 2 - нельзя смешивать в арифметическом выражении логические и числовые данные.
3) y=0 and trunc(1/x) mod 3 = 0 or false - В языке Паскаль приоритет операций /, mod, and одинаков и выше, чем приоритет операций =, or и поэтому выражение можно записать так же в виде
y = ((0 and trunc(1/x)) mod 3) = 0 or false, откуда хорошо видно, что 0 and trunc(1/x) некорректное логическое выражение.