Страница 1 из 1

Одномерный массив

Добавлено: 23 янв 2006, 22:45
pikass
Задана последовательность N вещественных чисел. Вычислить сумму чисел, порядковые номера которых являются простыми числами.

Ну понятно, что простые это 1,2,3,5,7,11,13......
Они делятся на себя на 1 и не делятся на другие числа.
А как это связать с задачей?
Помогите, может у кого-то было что-то похожее.

Добавлено: 24 янв 2006, 08:52
LAngel

Код: Выделить всё

procedure GetSumOfSimplePlacedNumbers;
const N = 10;
var
  ch: array[1..N] of Real;
  s, i: Integer;
  InArray: Boolean;
  Simple: array of Integer;
  Summ: Real;
begin
  for i := 1 to N do ch[i] := Random(1000);
  // заполняем массив простых чисел
  for s := Low(ch) to High(ch) do
  begin
    InArray := True;
    for i := Low(Simple)+1 to High(Simple) do
      if s / Simple[i] = s div Simple[i] then InArray := False;
    if InArray then
    begin
      SetLength(Simple, Length(Simple)+1);
      Simple[High(Simple)] := s;
    end;
  end;
  // считаем сумму
  Summ := 0;
  for i := Low(Simple) to High(Simple) do
    Summ := Summ + ch[Simple[i]];
  ShowMessage('Сумма: ' + FloatToStr(Summ));
end;

Добавлено: 24 янв 2006, 12:45
SydNey
Формируешь множество простых чисел "решетом Эратосфена" и проходишь по массиву: если номер элемента входит в это множество, прибавляешь элемент к сумме.

Добавлено: 24 янв 2006, 20:12
pikass
Спасибо большое, работает хорошо.

Добавлено: 25 янв 2006, 14:54
Blood_Magic
Это не форум программистов, а форум по решению практических работ?

Добавлено: 25 янв 2006, 15:13
LAngel
Посмотрит - научится.
А что, алгоритм лучше словами? ;) )))