Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/58: Рейтинг темы: голосов - 58, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 13.04.2019
Сообщений: 34

Найти произведение 20 первых простых чисел

05.05.2019, 15:03. Показов 10933. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Найти произведение 20 первых простых чисел
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.05.2019, 15:03
Ответы с готовыми решениями:

Найти 100 первых простых чисел
Найти 100 первых простых чисел

Найти сумму и произведение 15 простых чисел
Найти сумму и произведение 15 простых чисел.Простым числом называют число у которого есть только два делителя само число и единица.Найти...

Найти произведение первых N натуральных чисел
1)Найти сумму первых N натуральных чисел 2)Найти произведение первых N натуральных чисел

15
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
05.05.2019, 17:36
Julia Smirnova, найти факториал 20?
0
1 / 1 / 0
Регистрация: 13.04.2019
Сообщений: 34
05.05.2019, 18:36  [ТС]
да, именно
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
05.05.2019, 18:54
Julia Smirnova
Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
var
 
n: Integer; 
f: Longint; 
 
begin
  f := 1;
  for n := 2 to 20 do 
    f := f * n;
  Write(f);
end.
0
Почетный модератор
 Аватар для Puporev
64311 / 47608 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
05.05.2019, 19:10
Цитата Сообщение от Пс Посмотреть сообщение
найти факториал 20?
Нет, именно простых чисел, типа 2*3*5*7*11*13.....
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
05.05.2019, 19:29
Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function Simple(x: integer): boolean;
var
  i: integer;
begin
  for i := 2 to x div 2 do
    if x mod i = 0 then
    begin
      result := false;
      exit
    end;
  result := true;
end;
 
var
  
  n: Integer; 
  f: Longint;
 
begin
  f := 1;
  for n := 2 to 8 do 
    if Simple(n) then
      f := f * n;
  Write(f);
end.
1
Модератор
10153 / 5490 / 3370
Регистрация: 17.08.2012
Сообщений: 16,783
11.05.2019, 00:56
Лучший ответ Сообщение было отмечено Julia Smirnova как решение

Решение

Пс, достаточно
Pascal Скопировано
5
  for i := 2 to trunc(sqrt(x)) do
И программа Ваша вычисляет произведение лишь первых 4 простых чисел, что не соответствует заданию. Правильно будет, например, так:
Pascal Скопировано
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var
  
  n, k: Integer; 
  f: Longint;
 
begin
  f := 1;
  n := 1;
  for k := 1 to 20 do
    begin 
      repeat inc(n) until Simple(n);
      f := f * n
    end;
  Write(f);
end.
Решение с применением решета Эратосфена:
Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const
  n = 20;
  m = trunc(n * (ln(n) + ln(ln(n)))); //оценка сверху n-ного простого числа (верна при n >= 6)
 
var
  s: array[2..m] of integer; //решето
  i, j, k, p: longint;
 
begin
  for i := 2 to m do s[i] := i; //заполнение решета
  i := 1; //начальная величина для поиска простого числа
  p := 1; //начальная величина произведения
  for k := 1 to n do //цикл поиска и умножения первых n простых чисел
    begin
      repeat inc(i) until s[i] > 0; //ищем в решете очередное простое число
      p := p * s[i]; //вычисляем целевое произведение
      j := i + i; //минимальное число, кратное найденному простому
      while j <= m do //цикл удаления из решета чисел, кратных найденному простому
        begin
          s[j] := 0; //удаляем
          inc(j, i) //вычисляем следующее число, кратное найденному простому
        end
    end;
  write('P = ', p); //печать результата
  readln
end.
1
1 / 1 / 0
Регистрация: 13.04.2019
Сообщений: 34
11.05.2019, 17:51  [ТС]
Что означает функция simple?
0
Почетный модератор
 Аватар для Puporev
64311 / 47608 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
11.05.2019, 17:56
Просто автор так назвал функцию определения простого числа (simple=>просто)
1
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
11.05.2019, 20:46
Puporev, фунция не моя,где-то на форуме нашел)
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
12.05.2019, 18:37
Cyborg Drone после проверки забыл поменять значения
Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function Simple(x: integer): boolean;
var
  i: integer;
begin
  for i := 2 to x div 2 do
    if x mod i = 0 then
    begin
      result := false;
      exit
    end;
  result := true;
end;
 
var
  
  n: Integer; 
  f: Longint;
 
begin
  f := 1;
  for n := 2 to 20 do
    if Simple(n) then
      f := f * n;
  write(f);
end.
это исправленный
0
Модератор
10153 / 5490 / 3370
Регистрация: 17.08.2012
Сообщений: 16,783
13.05.2019, 23:22
Нет, Пс, это ещё один неправильный вариант.

Нужно найти произведение 20 первых простых чисел, а не произведение простых чисел, меньших 20.

По условию нужно вычислить вот это:

2*3*5*7*11*13*17*19*23*29*31*37*41*43*47 *53*59*61*67*71

Ваша программа вычисляет вот это:

2*3*5*7*11*13*17*19
0
 Аватар для Mikstereo
98 / 36 / 18
Регистрация: 05.11.2018
Сообщений: 231
14.05.2019, 00:09
Лучший ответ Сообщение было отмечено Cyborg Drone как решение

Решение

Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var i,k,d:longint;
f:boolean;
p:BigInteger;
begin
  i:=2;p:=1;
  while k<=19 do
    begin
      f:=i>1;
      d:=2;
      while(f)and(d*d<=i) do
        begin
          f:=i mod d<>0;
          d:=d+1;
        end;
      if f
        then begin p:=p*i;k:=k+1;end;
        i:=i+1;
   end;
 write(p);
end.
В решениях выше нигде длинной арифметики не видел, ну или дробных чисел, так что использовал BigInteger(вроде как в PascalABC он есть).
2*3*5*7*11*13*17*19*23*29*31*37*41*43*47 *53*59*61*67*71=557940830126698960967415 390
1
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
14.05.2019, 07:04
Cyborg Drone, я оказывается задание не правильно понял)
Постараюсь сегодня исправить
0
Модератор
10153 / 5490 / 3370
Регистрация: 17.08.2012
Сообщений: 16,783
15.05.2019, 21:31
Mikstereo, верно замечено. Любого стандартного типа, в том числе, comp, int64, uint64 и extended недостаточно для представления (в случае с extended - для точного представления) этого произведения. Я что-то беспечно не проверил это дело, и ошибочно предположил, что longint вполне хватит. Спасибо большое Вам.

Нет, biginteger в Pascal ABC нет, но это есть в Pascal ABC.NET (прям каламбур какой-то, в (этом уродце) ABC нет, а в ABC.NET не нет).

Наверное, нужно будет написать с длинной арифметикой, но сейчас у меня просто сил нет что-либо писать.
0
Модератор
10153 / 5490 / 3370
Регистрация: 17.08.2012
Сообщений: 16,783
04.02.2020, 18:22
Решил доделать недоделанное.

Произведение последовательности простых чисел называется "Праймориал", и обозначается pn#, где n - количество простых чисел. Так что, по заданию требуется найти p20#.

p20# = 557940830126698960967415390. В этом числе 27 десятичных разрядов. 20-е простое число равно 71, если использовать для длинной арифметики longword, можно делать перемножение по модулю 107, поскольку [(232 - 1) div 71] = 60492497 содержит 8 разрядов, следовательно, без риска целочисленного переполнения можно использовать 7 разрядов. 7*4=28 больше, чем 27, следовательно, для вычисления p20# понадобится массив из 4 элементов типа longword.

Получилось вот так:
Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function simple(x: longword): boolean;
var
  i: longword;
begin
  simple := x > 1;
  for i := 2 to trunc(sqrt(x)) do
    if x mod i = 0 then
      begin
        simple := false;
        break
      end
end;
 
const
  g = 10000000;
var
  n, i, k: longword;
  f: array[1..4] of longword;
begin
  f[1] := 1; //начальное значение произведения = 1
  for k := 1 to 20 do //цикл по номерам простых чисел
    begin
      repeat inc(n) until simple(n); //ищем очередное простое
      for i := 1 to 4 do f[i] := f[i] * n; //умножаем массив на очередное простое число
      for i := 1 to 3 do //цикл распространения переноса по модулю 10^7
      begin
        f[i + 1] := f[i + 1] + f[i] div g; //добавляем перенос к следующему элементу
        f[i] := f[i] mod g //усекаем элемент
      end
    end;
  for i := 4 downto 1 do write(f[i]) //выводим результат
end.
Чуть изменил функцию simple, потому что не изменённая функция ошибочно считает любое целое число, меньшее двух, простым числом.
Не стал инициализировать переменную n, поскольку она глобальная, и инициализируется нулём.
Не стал делать печать дополняющих до 7 разрядов нулей для элементов массива, поскольку равные нулю значащие разряды p20# расположены на позициях, не кратных 7, а программа предназначена для вычисления именно p20#. Была бы программа универсальная, тогда бы печать дополняющих нулей была бы необходима.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.02.2020, 18:22
Помогаю со студенческими работами здесь

Найти произведение первых 5 нечетных натуральных чисел, не превосходящих N
1. Найти произведение первых 5 нечетных натуральных чисел, не превосходящих N. Первое число поместите в ячейку с адресом , значение N в ,...

В массиве из 55 случайных чисел найти произведение шести первых элементов
3)В массиве из 55 случайных чисел принадлежащих интервалу (-15..55) найти произведение шести первых элементов

Функции: Найти произведение первых n простых чисел
Вредный препод дал мне такую задачку: Дано натуральное n&gt;0. Найти произведение первых n простых чисел. (Определите функцию,...

Найти k первых простых чисел
Найти k первых простых чисел \frac{1}{a} + \frac{1}{a(a + 1)} +...+ \frac{1}{a(a + 1)*...*(a + n)}

найти К первых простых чисел в арифмметической прогрессии: 21 31 41 51 61.....
ввести натуральное число К. найти К первых простых чисел в арифмметической прогрессии: 21 31 41 51 61.....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть. Дело в том, что я. . .
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер