Можете написать формулы (по таблице в excel): 1)начислено = ставка * тарифные ставки2)налог = 0, если начислено меньше 1000, 12%, если начислено больше 1000, но меньше 3000, и 20%, если начислено больше или равно 3000
type ListSimple = class l := new List<int64>(); procedure AddSimple(N: int64); begin var Result := True;
var num := n; while num > 0 do begin if not (num mod 10 in [2,3,5,7]) then begin Result := False; break; end; num := num div 10; end; if not Result then exit;
for var i: int64 := 2 to round(sqrt(N)) do if N mod i = 0 then begin Result := False; break; end; // lock не позволяет нескольким потокам одновременно выполнять эту секцию. // Это обязательно, иначе если несколько потоков одновременно будут пытаться добавить значение в список, список может оказаться испорченным // Секция, охраняемая lock, называется критической lock l do if Result then l.Add(N); end; end;
var hh := 100000;
begin var ls := new ListSimple; var ii: int64 := 2;
Parallel.For(ii, ii + hh, ls.AddSimple); writeln(ls.l.Count); ls.l := ls.l.OrderBy(x->x).ToList(); //- это можно включить для проверки того, что в обоих списках - одинаковые простые числа for var i := 0 to ls.l.Count - 1 do writeln(i+1,' - ',ls.l[i]);
writeln; writeln('Время выполнения = ', Milliseconds); end.
//PascalABC.NET версия 3.2, сборка 1417 //Если программа не запускается, то обновите версию begin var m := MatrRandom(ReadInteger('n ='), ReadInteger('m ='), 0, 9); m.Println();
{1} Writeln('количество элементов соответствующей строки'); var number := ReadInteger('Введите число, для проверки ='); var a := m.Rows.Select(r -> r.Count(x -> x > number)); a.Println;
{2} Writeln('Определить,есть ли в данном массиве столбец, в котором имеются одинаковые элементы.'); var b := m.Cols.Select(r -> r.GroupBy(v -> v).Count(g -> g.Count() > 1)); b.Println; Writeln(b.Any(x -> x > 0));
{3} Writeln('Заполнить массив'); var n := 2 * Max(m.RowCount, m.ColCount) div 2 + 1; m := MatrGen(n, n, (i, j)-> ((n - 1 - i - j) * (i - j) > 0) ? 0 : 1); m.Println(); end.
uses
System, System.Net, System.Threading.Tasks, System.Collections.Generic;
type
ListSimple = class
l := new List<int64>();
procedure AddSimple(N: int64);
begin
var Result := True;
var num := n;
while num > 0 do begin
if not (num mod 10 in [2,3,5,7]) then
begin
Result := False;
break;
end;
num := num div 10;
end;
if not Result then exit;
for var i: int64 := 2 to round(sqrt(N)) do
if N mod i = 0 then
begin
Result := False;
break;
end;
// lock не позволяет нескольким потокам одновременно выполнять эту секцию.
// Это обязательно, иначе если несколько потоков одновременно будут пытаться добавить значение в список, список может оказаться испорченным
// Секция, охраняемая lock, называется критической
lock l do
if Result then
l.Add(N);
end;
end;
var
hh := 100000;
begin
var ls := new ListSimple;
var ii: int64 := 2;
Parallel.For(ii, ii + hh, ls.AddSimple);
writeln(ls.l.Count);
ls.l := ls.l.OrderBy(x->x).ToList(); //- это можно включить для проверки того, что в обоих списках - одинаковые простые числа
for var i := 0 to ls.l.Count - 1 do
writeln(i+1,' - ',ls.l[i]);
writeln;
writeln('Время выполнения = ', Milliseconds);
end.
Список суперпростых
1 - 2
2 - 3
3 - 5
4 - 7
5 - 23
6 - 37
7 - 53
8 - 73
9 - 223
10 - 227
11 - 233
12 - 257
13 - 277
14 - 337
15 - 353
16 - 373
17 - 523
18 - 557
19 - 577
20 - 727
21 - 733
22 - 757
23 - 773
24 - 2237
25 - 2273
26 - 2333
27 - 2357
28 - 2377
29 - 2557
30 - 2753
31 - 2777
32 - 3253
33 - 3257
34 - 3323
35 - 3373
36 - 3527
37 - 3533
38 - 3557
39 - 3727
40 - 3733
41 - 5227
42 - 5233
43 - 5237
44 - 5273
45 - 5323
46 - 5333
47 - 5527
48 - 5557
49 - 5573
50 - 5737
51 - 7237
52 - 7253
53 - 7333
54 - 7523
55 - 7537
56 - 7573
57 - 7577
58 - 7723
59 - 7727
60 - 7753
61 - 7757
62 - 22273
63 - 22277
64 - 22573
65 - 22727
66 - 22777
67 - 23227
68 - 23327
69 - 23333
70 - 23357
71 - 23537
72 - 23557
73 - 23753
74 - 23773
75 - 25237
76 - 25253
77 - 25357
78 - 25373
79 - 25523
80 - 25537
81 - 25577
82 - 25733
83 - 27253
84 - 27277
85 - 27337
86 - 27527
87 - 27733
88 - 27737
89 - 27773
90 - 32233
91 - 32237
92 - 32257
93 - 32323
94 - 32327
95 - 32353
96 - 32377
97 - 32533
98 - 32537
99 - 32573
100 - 33223
101 - 33353
102 - 33377
103 - 33533
104 - 33577
105 - 33757
106 - 33773
107 - 35227
108 - 35257
109 - 35323
110 - 35327
111 - 35353
112 - 35527
113 - 35533
114 - 35537
115 - 35573
116 - 35753
117 - 37223
118 - 37253
119 - 37273
120 - 37277
121 - 37337
122 - 37357
123 - 37537
124 - 37573
125 - 52223
126 - 52237
127 - 52253
128 - 52553
129 - 52727
130 - 52733
131 - 52757
132 - 53233
133 - 53323
134 - 53327
135 - 53353
136 - 53377
137 - 53527
138 - 53773
139 - 53777
140 - 55333
141 - 55337
142 - 55373
143 - 55733
144 - 57223
145 - 57373
146 - 57527
147 - 57557
148 - 57727
149 - 57737
150 - 57773
151 - 72223
152 - 72227
153 - 72253
154 - 72277
155 - 72337
156 - 72353
157 - 72533
158 - 72577
159 - 72727
160 - 72733
161 - 73237
162 - 73277
163 - 73327
164 - 73523
165 - 73553
166 - 73727
167 - 73757
168 - 75223
169 - 75227
170 - 75253
171 - 75277
172 - 75323
173 - 75337
174 - 75353
175 - 75377
176 - 75527
177 - 75533
178 - 75553
179 - 75557
180 - 75577
181 - 75773
182 - 77237
183 - 77323
184 - 77377
185 - 77527
186 - 77557
187 - 77573
188 - 77723
189 - 77773
//Если программа не запускается, то обновите версию
begin
var m := MatrRandom(ReadInteger('n ='), ReadInteger('m ='), 0, 9);
m.Println();
{1}
Writeln('количество элементов соответствующей строки');
var number := ReadInteger('Введите число, для проверки =');
var a := m.Rows.Select(r -> r.Count(x -> x > number));
a.Println;
{2}
Writeln('Определить,есть ли в данном массиве столбец, в котором имеются одинаковые элементы.');
var b := m.Cols.Select(r -> r.GroupBy(v -> v).Count(g -> g.Count() > 1));
b.Println;
Writeln(b.Any(x -> x > 0));
{3}
Writeln('Заполнить массив');
var n := 2 * Max(m.RowCount, m.ColCount) div 2 + 1;
m := MatrGen(n, n, (i, j)-> ((n - 1 - i - j) * (i - j) > 0) ? 0 : 1);
m.Println();
end.