Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mnoshtext.doc
Скачиваний:
5
Добавлен:
09.02.2015
Размер:
109.57 Кб
Скачать
  1. {Определение простых чисел в диапазоне от 0 до 3000}

  2. program mnosh3;

  3. {$APPTYPE CONSOLE}

  4. uses

  5. SysUtils;

  6. constMm=255;// количество значений, заносимых в множество

  7. Nn=3000divMm+1;//количество элементов в массиве

  8. type Mn=set of 1..Mm;

  9. Mas=array[1..Nn] of Mn;

  10. VarA,b:mas;// массивы исходного и получаемого множества чисел

  11. I,j,n,k,l,m,Kb,Ib,Jb,s,Si,Sj,Kp:integer;

  12. function Rus(S:String):String;

  13. Var I:Byte;

  14. begin

  15. Result:='';

  16. for I:=1 to Length(S) do

  17. case S[I] of

  18. 'А'..'п': Result:=Result+Chr(Ord(S[I])-64);

  19. 'р'..'я': Result:=Result+Chr(Ord(S[I])-16);

  20. 'Ё': Result:=Result+Chr(240);

  21. 'ё': Result:=Result+Chr(241);

  22. else

  23. Result:=Result+S[I];

  24. end;

  25. end;

  26. begin

  27. WriteLn(Rus('Введите максимальное число диапазона (не более 3000)'));

  28. ReadLn(N);

  29. WriteLn('N=',N:4);

  30. //цикл присваивания начальных значений массивам множеств

  31. for I:=1 to Nn do

  32. begin

  33. A[I]:=[];

  34. B[I]:=[];

  35. end;

  36. {формирование массива множеств из чисел заданного диапазона}

  37. K:=NdivMm;//количество используемых элементов массива мно-

  38. //жеств

  39. L:=NmodMm;//количество чисел в последнем элементе массива

  40. //множеств

  41. //цикл заполнения исходного массива множеств

  42. for I:=1 toKdo

  43. for J:=1 to Mm do

  44. A[I]:=A[I]+[J];

  45. //цикл заполнения последнего элемента исходного массива мно-

  46. //жеств

  47. if L<>0 then //L– количество элементов в последнем множестве

  48. forI:=1toN-K*Mmdo//N-K*Mm-количество элементов в

  49. //предыдущих элементах массива множеств

A[K+1]:=A[K+1]+[I];

  1. {Печать чисел исходного множества}

  2. WriteLn(Rus('Исходное множество'));

  3. for I:=1 toKdo

  4. for J:=1 to Mm do

  5. if J in A[I] then Write((I-1)*Mm+J:4,' ');

  6. if L<>0 then

  7. for I:=1 to N-K*Mm do

  8. if I in A[K+1] then Write((K*Mm+I):4,' ');

  9. ReadLn;

  10. //Поиск простых чисел

  11. B[1]:=B[1]+[1];//добавление единицы в результат

  12. A[1]:=A[1]-[1];//удаление единицы из исходного множества

  13. M:=2; //очередное простое число

  14. if L<>0 thenK:=K+1;//количество непустых элементов массиваA

  15. while A[K]<>[ ] do //цикл поиска простых чисел (пока исходное

  16. begin //множество не станет пустым

  17. S:=M; //установка начального значения очередного удаляемого

  18. //из исходного множества числа

  19. while S<=Ndo //цикл удаления из исходного множества

  20. begin //непростых чисел

  21. Si:=SdivMm; //номер элемента массива множеств, содержа-

  22. //щего удаляемый элемент

  23. Sj:=SmodMm; //номер удаляемого элемента в множестве

  24. ifSj=0thenA[Si]:=A[Si]-[Mm] //исключение числа из

  25. elseA[Si+1]:=A[Si+1]-[Sj];//исходного множества

  26. S:=S+M; //вычисление очередного удаляемого числа

  27. end;

  28. Ib:=MdivMm;//номер элемента массива множеств для добавле-

  29. //ния очередного простого числа

  30. Jb:=MmodMm;// номер добавляемого элемента в множестве

  31. ifJb=0thenB[Ib]:=B[Ib]+[Mm] //добавление простого числа

  32. elseB[Ib+1]:=B[Ib+1]+[Jb];//в множество-результат

  33. repeat // цикл нахождения минимального числа, содержащегося

  34. M:=M+1;// в исходном множестве – нового простого числа

  35. Si:=MdivMm;

  36. Sj:=MmodMm;

  37. if Sj=0 then I:=Si else I:=Si+1;

  38. until (M>N)or(Sj in A[I]);

  39. end;

  40. {Печать полученного множества}

  41. WriteLn(Rus('Простые числа из заданного диапазона'));

  42. for I:=1 to Ib do

  43. begin

  44. for J:=1 to Mm do

  45. if J in B[I] then Write((I-1)*Mm+J:4,' ');

  46. ReadLn;

  47. end;

  48. if Jb<>0 then

  49. for J:=1 to Mm do

  50. if J in B[Ib+1] then Write (Ib*Mm+J:4,' ');

  51. WriteLn;

  52. ReadLn;

  53. end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]