Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2010, 16:41   #1
HuKuTa74
Новичок
Джуниор
 
Регистрация: 06.12.2010
Сообщений: 1
Восклицание Вычисление простых чисел

дан массив натуральных чисел A(N).Сформировать массив B(M) содержащий только элементы массива A,являющиеся простыми числами.
HuKuTa74 вне форума Ответить с цитированием
Старый 06.12.2010, 16:59   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Вот вам функция для простых чисел
Код:
Function IsSimple (z:integer):boolean;
var j,lim: integer;
begin
     IsSimple:=false;
     lim:=round(sqrt(z));
     j:=2;
     while (z mod j <> 0) and (j <= lim) do inc( j );
     if (j > lim) then IsSimple:=true;
end;
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 06.12.2010, 17:12   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну и я свой вариант кину. он чуть более защищён (отрицательные числа не могут быть простыми, например)... ну и попытка оптимизации добавлена...

Код:

function isPrime(X: LongInt): boolean;
var i: integer;
Begin
     isPrime:=false;
     if x<2 then Exit;
     if not odd(x) and (x<>2) { проверяем на чётность  }
          then exit;
     i:=3;
     while i <= sqrt(x) do { проверяем только нечётные }
     begin
          if x mod i = 0 then Exit;
          inc(i,2);
     end;
     isPrime:=true;
End;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.12.2010, 18:04   #4
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

Код:
uses
  Crt;

const
  Nmax = 100;

var
  A, B: Array[1..Nmax] of Longint;
  n, m, i: Integer;
begin
  ClrScr;
  WriteLn('Введите массив A:');
  n := 0;
  while not SeekEoLn do begin
    Inc(n);
    Read(A[n]);
  end;
  m := 0;
  for i := 1 to n do
    if IsPrime(A[i]) then begin
      Inc(m);
      B[m] := A[i];
    end;
  WriteLn('B:');
  for i := 1 to m do
    Write(B[i], ' ');
  ReadKey;
end.
Функцию IsPrime описал выше Serge_Bliznykov.
Kingdom_Reborn вне форума Ответить с цитированием
Старый 06.12.2010, 18:51   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Шож у вас так все сложно то?
Код:
const n=10;m=n;
var a:array[1..n] of integer;
     e,i:integer;
     b:array[1..m] of integer;
begin   e:=1;
 randomize;
 for i:=1 to 10 do begin
  a[i]:=random(200); write(a[i]:5);
  if (((a[i]-1) mod 6)=0)and(((sqr(a[i])-1) mod 24)=0) then  begin b[e]:=a[i];inc(e);end;
 end;
 writeln;
 for i:=1 to e do write(b[i]:5);
 readln;
end.
По мотивам
Цитата:
# Всякое простое число, большее 3, представимо в виде 6k + 1 или 6k − 1, где k — некоторое натуральное число.

# Если p > 3 — простое, то p^2 − 1 кратно 24 (справедливо также для всех нечётных чисел, не делящихся на 3).
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.12.2010, 21:28   #6
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

Stilet, те два утверждения, что вы привели, возможно, и верны, но вот обратные к ним верны не всегда. Пример: число 25. По вашему условию:
Код:
if (((a[i]-1) mod 6)=0)and(((sqr(a[i])-1) mod 24)=0)
25 - 1 = 24 = 4 * 6; 25^2 - 1 = 625 - 1 = 624 = 156 * 24
По вашему условию 25 будет простым.
Kingdom_Reborn вне форума Ответить с цитированием
Старый 07.12.2010, 00:29   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Kingdom_Reborn +1

Stilet, Виталий, действительно:
Код:
a := 25;
if (((a-1) mod 6)=0)and(((sqr(a-1) mod 24)=0)) then  WriteLn('a простое')
else Writeln('a - не простое!');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.12.2010, 09:36   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мое дело попытаться - ваше забанить )))))
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Первые 30 простых чисел Fantom.as Общие вопросы C/C++ 11 19.04.2015 09:10
Поиск простых чисел из диапазона dex92 Помощь студентам 2 21.05.2010 09:40
Нахождение простых чисел. Lunex.08 Общие вопросы C/C++ 7 10.04.2009 17:01
Вывод простых чисел. MAKEDON Помощь студентам 1 10.03.2009 16:55
вычисление суммы чисел, кратных 3 из последовательности, состоящей из 10 чисел, заранее заданных Белка Помощь студентам 3 27.10.2007 11:53