На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 19
ссылка на сообщение  Отправлено: 28.08.21 04:03. Заголовок: ege 25 №87


87) (К. Амеличев) Среди целых чисел, принадлежащих числовому отрезку [2945; 18294], найдите числа, не делящиеся на вторую степень какого-либо числа, кроме единицы. Ответом будет сумма цифр найденных чисел.
Здравствуйте, не понимаю почему не сходится ответ, решаю перебором до квадратного корня, помогите пожалуйста. В ответе 7642289

 
summa = 0
for ch in range(2945, 18295):

for de in range(2, round(ch**0.5)):
kv = de**2
if (ch % kv) != 0 :
while ch > 0:
y = ch % 10
ch=ch//10
summa =summa+y
print(summa)


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 4 [только новые]







Сообщение: 451
ссылка на сообщение  Отправлено: 28.08.21 20:42. Заголовок: Ответ


Здравствуйте, elpov06!

В ответе не 7642289, а 177084.

В условии задачи: ... найдите числа, не делящиеся на вторую степень какого-либо числа, кроме единицы.
Вы неправильно реализуете это условие.


Исправить Ваше решение можно, например, так:
 цитата:
 def f(x): 
for de in range(2, round(x**0.5)+1):
kv = de**2
if (x % kv) == 0 :
return False
return True

summa = 0
for ch in range(2945, 18295):
if f(ch):
while ch > 0:
y = ch % 10
ch //= 10
summa += y
print(summa)

Авторское решение:
 цитата:
 start, end = 2945, 18294 

def valid( x ):
count = 2
while count*count <= x:
if x % (count*count) == 0:
return False
count += 1
return True

s = 0
for x in range( start, end+1 ):
if valid(x):
s += sum( map(int, str(x)) )
print( s )



Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 20
ссылка на сообщение  Отправлено: 30.08.21 15:25. Заголовок: Спасибо большое за о..


Спасибо большое за ответ, только я не поняла чем отличаются Ваша и моя программа. Я поняла что алгоритм тот же. вы через функцию решали, а я через вложенный цикл. Не могу понять в чем отличие
проверила по двум числам
 

ch=2555
summa=0

for de in range(2, round(ch**0.5)+1):
kv = de**2
if (ch % kv) != 0 :
while ch > 0:
y = ch % 10
ch//=10
summa +=y
print(summa)


ответ 17

 
def f(x):
for de in range(2, round(x**0.5)+1):
kv = de**2
if (x % kv) == 0 :
return False
return True

summa = 0
ch=2555
if f(ch):
while ch > 0:
y = ch % 10
ch //= 10
summa += y
print(summa)

ответ 17
а если с циклом, то ответы не сходятся, но я не могу понять почему), напишите пожалуйста

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 452
ссылка на сообщение  Отправлено: 30.08.21 18:27. Заголовок: Ответ


Здравствуйте, elpov06!


Вы пишете:
 цитата:
Я поняла что алгоритм тот же

Нет, это не так.


Попробуйте, например, число 3008.

Это число делится на 4, 16, 64. Поэтому summa для него должна быть равна 0.
Для вашей программы это не так.

Суть ошибки в том, что сумма должна увеличиваться, если рассматриваемое число не делится НИ НА ОДНУ вторую степень какого-либо числа, кроме единицы.

В вашей программе сумма увеличивается, если число не делится НА ОДНУ ИЗ вторых степеней какого-либо числа, кроме единицы.



Без использования функции задачу можно решить, например, так:
 цитата:
 summa = 0 
for ch in range(2945, 18295):
flag = True
for de in range(2, round(ch**0.5)+1):
kv = de**2
if (ch % kv) == 0:
flag = False
break
if flag:
while ch > 0:
y = ch % 10
ch //= 10
summa += y
print(summa)


P.S. Еще обратите внимание, что в вашей программе ch после цикла while обнуляется. Поэтому ряд проверок осуществляется неверно.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 21
ссылка на сообщение  Отправлено: 31.08.21 05:18. Заголовок: Спасибо большое тепе..


Спасибо большое теперь поняла, что ни на одно число!!

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1922
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет