Задания
Версия для печати и копирования в MS Word

На­пи­ши­те про­грам­му, ко­то­рая ищет среди целых чисел, при­над­ле­жа­щих чис­ло­во­му от­рез­ку [2422000; 2422080], про­стые числа. Вы­ве­ди­те все най­ден­ные про­стые числа в по­ряд­ке воз­рас­та­ния, слева от каж­до­го числа вы­ве­ди­те его номер по по­ряд­ку, счи­тая, что пер­вое най­ден­ное число имеет номер 1, вто­рое  — 2 и так далее.

Ответ:

Спрятать решение

Ре­ше­ние.

Решим за­да­чу пе­ре­бо­ром. Будем про­ве­рять в цикле ко­ли­че­ство де­ли­те­лей. Ко­ли­че­ство най­ден­ных про­стых чисел за­пи­сы­ва­ем в пе­ре­мен­ную count. Функ­цию isPrime будем ис­поль­зо­вать для опре­де­ле­ния про­стых чисел.

 

При­ведём ре­ше­ние на языке PascalABC.

var n, count: longint;

function isPrime( n: integer ): boolean;

var d: longint;

begin

isPrime := True;

for d:=2 to round(sqrt(n)) do

if n mod d = 0 then begin

isPrime := False;

break;

end;

end;

begin

count := 0;

for n:=2422000 to 2422080 do begin

if isPrime(n) then begin

count := count + 1;

writeln( count, ' ', n )

end

end

end.

 

В ре­зуль­та­те ра­бо­ты про­грам­ма долж­на вы­ве­сти сле­ду­ю­щее:

1 2422027

2 2422033

3 2422037

4 2422073

 

При­ведём ре­ше­ние Са­ви­ча Алек­сандра (Москва) на языке Python.

a = 2422000

b = 2422080

m = 0

for i in range(a,b+1):

k = 0

for j in range(2,i//2+1):

if i%j==0:

k+=1

break

if k==0:

m += 1

print(m,i)

 

При­ведём ре­ше­ние Ва­г­не­ро­ва Ивана на языке Python.

def f(n):

return n > 1 and all(n%i !=0 for i in range(2,int(n**0.5)))

k = 0

for n in range(2422000,2422080):

if f(n):

k+=1

print(k,n)

 

При­ведём ре­ше­ние Сте­па­но­ва Ста­ни­сла­ва на языке Python.

k = 0

for i in range(2422000, 2422080 + 1):

for j in range(2, int(i ** 0.5) + 1):

if not i % j:

break

else:

k += 1

print(k,i)

 

При­ведём ре­ше­ние Артёма Гри­ди­на на языке Python.

print(*[f'{m[0]+1} {m[1]}\n' for m in enumerate([k for k in range(2422000, 2422081) if all(k%x != 0 for x in range(2, k//2+1))])], sep='', end='')

 

 

При­ме­ча­ние.

Фраза «слева от каж­до­го числа вы­ве­ди­те его номер по по­ряд­ку» озна­ча­ет, что слева от числа дол­жен быть вы­ве­ден его номер в по­сле­до­ва­тель­но­сти вы­во­ди­мых на экран чисел, то есть 1, 2, 3, ...

Фраза «слева от каж­до­го числа вы­ве­ди­те его номер в по­сле­до­ва­тель­но­сти» озна­ча­ет, что слева от числа дол­жен быть ука­зан его номер в по­сле­до­ва­тель­но­сти ис­ход­ных чисел.

 

При­ведём ре­ше­ние Ми­ха­и­ла Глин­ско­го на языке Python.

def d(x):

de=set()

for i in range(2,int(x**.5)+1):

if x%i==0:

de.add(i)

de.add(x//i)

de=sorted(de)

return de

for x in range(2422000,2422081):

if len (d(x))==0: print(x)

 

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

def prostoe(n):

k = 2

while k**2 <= n:

if n%k==0: return False

k += 1

return True

a = [n for n in range(2422000,2422080+1) if prostoe(n)]

for i in range(len(a)): print(i+1,a[i])

Раздел кодификатора ФИПИ: