Задания
Версия для печати и копирования в MS Word
Тип 5 № 61385
i

Ал­го­ритм по­лу­ча­ет на вход на­ту­раль­ное число N и стро­ит по нему новое число R сле­ду­ю­щим об­ра­зом:

1.  Стро­ит­ся дво­ич­ная за­пись числа N.

2.  В конец дво­ич­ной за­пи­си до­бав­ля­ют­ся две цифры, со­от­вет­ству­ю­щие дво­ич­ной за­пи­си остат­ка от де­ле­ния ис­ход­но­го числа на 3.

3.  В конец дво­ич­ной за­пи­си числа, по­лу­чен­но­го на преды­ду­щем шаге, до­бав­ля­ют­ся три цифры, со­от­вет­ству­ю­щие дво­ич­ной за­пи­си остат­ка от де­ле­ния этого числа на 5.

4.  Ре­зуль­та­том ра­бо­ты ал­го­рит­ма ста­но­вит­ся де­ся­тич­ная за­пись по­лу­чен­но­го числа R.

 

При­мер. Дано число N  =  13. Ал­го­ритм ра­бо­та­ет сле­ду­ю­щим об­ра­зом:

1.  Стро­им дво­ич­ную за­пись: 1310  =  11012.

2.  Оста­ток от де­ле­ния 13 на 3 равен 1, до­бав­ля­ем к дво­ич­ной за­пи­си цифры 01, по­лу­ча­ем 1101012  =  5310.

3.  Оста­ток от де­ле­ния 53 на 5 равен 3, до­бав­ля­ем к дво­ич­ной за­пи­си цифры 011, по­лу­ча­ем 1101010112  =  42710.

4.  Ре­зуль­тат ра­бо­ты ал­го­рит­ма R  =  427.

 

Опре­де­ли­те ко­ли­че­ство при­над­ле­жа­щих от­рез­ку [1 222 222 222; 1 555 555 666] чисел, ко­то­рые могут по­лу­чить­ся в ре­зуль­та­те ра­бо­ты этого ал­го­рит­ма.

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

Ре­ше­ние.

За­ме­тим, что ал­го­ритм до­пи­сы­ва­ет пять дво­ич­ных раз­ря­дов в конец. До­ста­точ­но от­бро­сить пять раз­ря­дов в дво­ич­ной за­пи­си чисел гра­ниц по­лу­чив­ше­го­ся от­рез­ка и по­счи­тать ко­ли­че­ство чисел в ис­ход­ном от­рез­ке. Со­ста­вим про­грам­му.

 

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

print(int(bin(1555555666)[2:][:-5], 2) - int(bin(1222222222)[2:][:-5], 2) -1)

 

Ответ: 10416669.

 

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

def triam (N):

N2 = N * 4 + N % 3

R = N2 * 8 + N2 % 5

return (R)

a = 1222222222

b = 1555555666

minim = a//32 - 1

while triam(minim) < a:

minim += 1

maximum = b//32 + 1

while triam(maximum) > b:

maximum -= 1

print (maximum - minim + 1)

 

 

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

count = 0

for n in range (38190000,49000000):

s = bin(n)[2:]

if n % 3 <= 1:

s = s + '0' + bin(n%3)[2:]

else:

s = s + bin(n%3)[2:]

r = int(s,2)

if r%5 <= 1:

s = s + '00' + bin(r % 5)[2:]

elif r % 5 <= 3:

s = s + '0' + bin(r % 5)[2:]

else:

s = s + bin(r % 5)[2:]

r = int(s, 2)

if r >= 1222222222 and r <= 1555555666:

count += 1

print(count)


Аналоги к заданию № 61351: 61385 Все