Тип 25 № 27850 
Раздел кодификатора ФИПИ: Обработка целочисленной информации. Нахождение делителей
i
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [245 690; 245 756] простые числа. Выведите на экран все найденные простые числа в порядке возрастания, слева от каждого числа выведите его порядковый номер в последовательности. Каждая пара чисел должна быть выведена в отдельной строке.
Например, в диапазоне [5; 9] ровно два различных натуральных простых числа — это числа 5 и 7, поэтому для этого диапазона вывод на экране должна содержать следующие значения:
1 5
3 7
Примечание. Простое число — натуральное число, имеющее ровно два различных натуральных делителя — единицу и самого себя.
Решение. Решим задачу перебором. Будем проверять количество делителей каждого числа из диапазона, если их количество равно двум — выводим пару чисел на экран.
Приведём решение на языке Pascal.
var
count, numDel, i, j: longint;
begin
count := 0;
for i := 245690 to 245756 do begin
count := count + 1;
numDel := 2;
for j := 2 to round(sqrt(i)) do begin
if i mod j = 0 then begin
numDel := numDel + 1;
if numDel > 2 then break;
end;
end;
if numDel = 2 then writeln(count, ' ', i);
end;
end.
В результате работы программа должна вывести следующее:
22 245711
30 245719
34 245723
52 245741
58 245747
64 245753
Приведём решение Павла Шостка на языке Pascal.
uses School;
(245690..245756).numerate.where(\(a,b)->b.divisorscount=2).printlines(\(a,b)->a+' '+b)
Приведём решение Полякова Петра на языке Python.
def f(x):
k=2
deliteli=set()
while k*k<=x:
if x%k==0:
deliteli.add(k)
if x//k<x:
deliteli.add(x//k)
k=k+1
return sorted(deliteli)
start=245690
end=245757
n=0
for i in range(start,end+1):
n=n+1
if len(f(i))==0:
print(n,i)
Приведём решение Глинского Михаила на языке Python.
n=0
for x in range (245690,245756+1):
m=[]
n+=1
for i in range(2,x//2+1):
if x%i==0:
m.append(i)
if len(m)>0:
break
if len(m)==0:
print(n,x)
Приведём решение Александра Винника на языке Python.
counter = 0
for i in range(245690, 245756 + 1):
counter += 1
ost = 0
for d in range(2, i):
if i % d == 0:
ost += 1
if ost == 0:
print(counter, i)
Приведём решение Евгения Петченко на языке Python.
for index, i in enumerate(range(245690, 245756 + 1)):
for j in range(2, i // 2 + 1):
if i % j == 0:
break
else:
print(index+1, i)
Приведём решение Артёма Гридина на языке Python.
is_prime = lambda x: all(x%m != 0 for m in range(2, x)) if x%2!=0 else False
for n in range(245690, 245757):
if is_prime(n):
print(n-245690+1, n)
Ответ: 22&245711&30&245719&34&245723&52&245741&58&245747&64&245753
27850
22 245711 30 245719 34 245723 52 245741 58 245747 64 245753
Раздел кодификатора ФИПИ: