Заблокирован
1

С паскаля в с++, последовательности идущих подряд простых чисел

05.12.2015, 10:09. Показов 1320. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Даны натуральное число n, и целые числа a1,a2…an. Рассмотреть отрезки последовательности a1,a2….,an (последовательности идущих подряд членов), состоящие из простых чисел. Найти наибольшую из длин рассматриваемых отрезков. Использовать функцию, позволяющую распознать простые числа.


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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
uses crt;
const nmax=13;
function Prost(a:longint):boolean;
var i:longint;
begin
if a<2 then Prost:=false
else
 begin
  Prost:=true;
  for i:=2 to round(sqrt(a)) do
  if a mod i=0 then
    begin
     Prost:=false;
     break;
    end;
 end;
end;
var a:array[1..nmax] of integer;
    n,i,j,k,mx,imx:byte;
begin
clrscr;
repeat
write('Размер массива до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Введите элементы массива:');
for i:=1 to n do
 begin
  write('a[',i,']=');
  readln(a[i]);
 end;
clrscr;
writeln('Массив:');
for i:=1 to n do
write(a[i],' ');
writeln;
writeln;
i:=2;mx:=0;imx:=0;
while i<=n do
if Prost(a[i])and Prost(a[i-1])  then
  begin
   j:=i;k:=1;
   while (Prost(a[j])and Prost(a[j-1]))and(j<=n) do
    begin
     j:=j+1;
     k:=k+1;
    end;
   if k>mx then
    begin
     mx:=k;
     imx:=i-1;
    end;
   i:=i+k;
  end
else i:=i+1;
if mx=0 then write('Нет простых чисел!')
else
 begin
  writeln('Максимальная последовательность простых чисел=',mx);
  for i:=imx to imx+mx-1 do
  write(a[i],' ');
 end;
readln
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2015, 10:09
Ответы с готовыми решениями:

Вывести в другой массив последовательности идущих подряд простых чисел
дан массив из натуральных чисел. вывести в другой массив последовательности идущих подряд членов,...

Подсчет наибольшего числа идущих подряд простых чисел в числовой последовательности
Задача 1. Последовательность. На контрольной работе по информатике Анатолию досталось задание,...

Найти максимальное количество простых чисел, идущих подряд
В последовательности целых чисел найти максимальное количество простых чисел, идущих подряд...

Найти n идущих подряд натуральных чисел, среди которых ровно k простых
Здравствуйте, помогите пожалуйста с задачей, никак не могу понять, что тут требуется сделать. ну и...

1
193 / 100 / 131
Регистрация: 23.06.2015
Сообщений: 249
05.12.2015, 11:00 2
Лучший ответ Сообщение было отмечено hgfvjkgyt как решение

Решение

C++
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <locale.h>
#include <stdlib.h>
#include <math.h>
 
const int nmax = 13;
 
bool Prost(long a)
{
    if(a < 2) return false;
    else
    {
        for(long i = 2; i <= (long)(sqrt((double)a) + 0.5); i++)
        {
            if(a % i == 0) return false;
        }
    }
    return true;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int a[nmax + 1];
    int n, i;
 
    do
    {
        std::cout << "Размер массива до " << nmax << " n=";
        std::cin >> n;
    }while(n < 1 || n > nmax);
 
    std::cout << "Введите элементы массива:" << std::endl;
    for (i = 1; i <= n; i++)
    {
        std::cout << "a[" << i << "]=";
        std::cin >> a[i];
    }
 
    system("cls");
    std::cout << "Массив:" << std::endl;
    for (i = 1; i <= n; i++)
    {
        std::cout << a[i] << ' ';
    }
    std::cout << std::endl;
    std::cout << std::endl;
 
    i = 2; int mx = 0, imx = 0, j, k;
    while (i <= n)
    {
        if (Prost(a[i]) && Prost(a[i - 1]))
        {
            j = i; k = 1;
            while ((Prost(a[j]) && Prost(a[j - 1])) && (j <= n))
            {
                j++;
                k++;
            }
            if (k > mx)
            {
                mx = k;
                imx = i - 1;
            }
            i += k;
        }
        else i++;
    }
 
    if (mx == 0)  std::cout << "Нет простых чисел!";
    else
    {
        std::cout << "Максимальная последовательность простых чисел=" << mx << std::endl;
        for(i = imx; i <= imx + mx - 1; i++) std::cout << a[i] << " ";
    }
 
    return 0;
}
0
05.12.2015, 11:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2015, 11:00
Помогаю со студенческими работами здесь

Найти в последовательности чисел два подряд идущих нуля
Дана последовательность из n чисел найти в ней кол-во 2 подряд идущих 0 Нужно сделать блок схему

Сумма всех идущих подряд в последовательности нечетных чисел
Здравствуйте! Условие: Дана последовательность чисел из n вещественных чисел. Первое число в...

Определите, есть ли в последовательности чисел три подряд идущих пятёрки
цикл с пред условием. С клавиатуры вводятся числа до первого отрицательного. Определите, есть...

Подсчитать наибольшее количество одинаковых подряд идущих чисел последовательности
Даны целые числа x1, ..., xn. Подсчитать наибольшее количество одинаковых подряд идущих чисел...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru