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

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

05.05.2019, 15:03. Показов 10771. Ответов 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 натуральных чисел

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

15
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,248
05.05.2019, 17:36 2
Julia Smirnova, найти факториал 20?
0
1 / 1 / 0
Регистрация: 13.04.2019
Сообщений: 34
05.05.2019, 18:36  [ТС] 3
да, именно
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,248
05.05.2019, 18:54 4
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
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
05.05.2019, 19:10 5
Цитата Сообщение от Пс Посмотреть сообщение
найти факториал 20?
Нет, именно простых чисел, типа 2*3*5*7*11*13.....
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,248
05.05.2019, 19:29 6
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
Модератор
10068 / 5409 / 3354
Регистрация: 17.08.2012
Сообщений: 16,560
11.05.2019, 00:56 7
Лучший ответ Сообщение было отмечено 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  [ТС] 8
Что означает функция simple?
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
11.05.2019, 17:56 9
Просто автор так назвал функцию определения простого числа (simple=>просто)
1
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,248
11.05.2019, 20:46 10
Puporev, фунция не моя,где-то на форуме нашел)
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,248
12.05.2019, 18:37 11
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
Модератор
10068 / 5409 / 3354
Регистрация: 17.08.2012
Сообщений: 16,560
13.05.2019, 23:22 12
Нет, Пс, это ещё один неправильный вариант.

Нужно найти произведение 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
98 / 36 / 18
Регистрация: 05.11.2018
Сообщений: 231
14.05.2019, 00:09 13
Лучший ответ Сообщение было отмечено 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,248
14.05.2019, 07:04 14
Cyborg Drone, я оказывается задание не правильно понял)
Постараюсь сегодня исправить
0
Модератор
10068 / 5409 / 3354
Регистрация: 17.08.2012
Сообщений: 16,560
15.05.2019, 21:31 15
Mikstereo, верно замечено. Любого стандартного типа, в том числе, comp, int64, uint64 и extended недостаточно для представления (в случае с extended - для точного представления) этого произведения. Я что-то беспечно не проверил это дело, и ошибочно предположил, что longint вполне хватит. Спасибо большое Вам.

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

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

Произведение последовательности простых чисел называется "Праймориал", и обозначается 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
04.02.2020, 18:22
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.02.2020, 18:22
Помогаю со студенческими работами здесь

В массиве из 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...

Найти n первых простых чисел (с использованием функции)
Найти n первых простых чисел (с использованием функции)

Задача на вложенные циклы: найти n первых простых чисел
Усл : Найти n первых простых чисел (число называется простым, если оно без остатка делится только...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru