Отримання знань

дистанційна підтримка освіти школярів


Тут ви можете виконати завдання чи задати питання по змiсту цього уроку.

Михальов Володимир (StarRover) 2013-10-05 12:15:50
Професор Стограмович та аспірант Наливайко купили квитки в швидкісний трамвай підвищеного комфорту "Телепеньки-Тюшки". Квитки мали номери від А до В і продавалися пасажирам підряд. Першим квитк купив Стограмович, останнім - Наливайко. Як тільки трамвай рушив, Стограмович, не бажаючи гаяти час (швидкісний трамвай долав цей маршрут довго) розпочав готувати Наливайка до захисту дисертації. Професор запропонував Наливайку дізнатися, яка цифра найчастіше буде використана, якщо виписати номери квитків пасажирів трамвая, але не всіх, а лише ті номери, що є простими числами. Наливайко дістав з рюбзака ноутбук і дуже швидко написав програму, що давала відповідь на це питання. Напишіть її і ви, якщо, як і Наливайко, знатимете, що (А<=B<=100 000).
Технічні умови. Програма читає з клавіатури два числа через пропуск. Програма виводить на екран єдине число- шукану величину.
Приклад
Введення: 5 25
Виведення: 1
--------------------------------------------------------

{Populy}
const
max=10000;
var
p:array[2..max] of boolean;
c:array[0..9] of longint;
a,b,i,f,fc:longint;
procedure GenPr;
var
j,m,k:longint;
begin
for j:=2 to max do p[j]:=True;
m:=Trunc(Sqrt(max));
j:=2;
while j<=m do begin
if p[j] then begin
k:=2*j;
while k<=max do begin
p[k]:=False;
k:=k+j;
end;
end;
j:=j+1;
end;
end;
procedure GetC(cif:longint);
var
x:longint;
begin
x:=cif;
repeat
c[x mod 10]:=c[x mod 10]+1;
x:=x div 10;
until x=0;
end;
begin
Read(a,b);
for i:=0 to 9 do c[i]:=0;
GenPr;
for i:=a to b do
if p[i] then GetC(i);
fc:=0;
f:=c[0];
for i:=0 to 9 do
if c[i]>f then begin
f:=c[i];
fc:=i;
end;
WriteLn(fc);
end.
Михальов Володимир (StarRover) 2013-10-10 11:06:36
Внесіть необхідіні зміни в розв'язок, аби коректно розв'язувалась задача в випадку, коли 1<=A<=B<=10000, а у випадку, коли простих чисел на проміжку немає, на екран виводиться -1.

Врахуйте при цьому, що якшо сама "популярна" цифра в простих числах на проміжку 0, то виводиться 0.
-------------------------------------------------

{Populy1}
const
max=10000;
var
p:array[1..max] of boolean;
c:array[0..9] of longint;
a,b,i,f,fc:longint;
procedure GenPr;
var
j,m,k:longint;
begin
p[1]:=False;
for j:=2 to max do p[j]:=True;
m:=Trunc(Sqrt(max));
j:=2;
while j<=m do begin
if p[j] then begin
k:=2*j;
while k<=max do begin
p[k]:=False;
k:=k+j;
end;
end;
j:=j+1;
end;
end;
procedure GetC(cif:longint);
var
x:longint;
begin
x:=cif;
repeat
c[x mod 10]:=c[x mod 10]+1;
x:=x div 10;
until x=0;
end;
begin
Read(a,b);
for i:=0 to 9 do c[i]:=0;
GenPr;
for i:=a to b do
if p[i] then GetC(i);
fc:=0;
f:=c[0];
for i:=0 to 9 do
if c[i]>f then begin
f:=c[i];
fc:=i;
end;
if f=0
then WriteLn('-1')
else WriteLn(fc);
end.

Повернутися до уроку

Повернутися до перелiку уроків курсу

В системі: гості - (1); користувачі - (0)