Автор | Сообщение |
|
Отправлено: 16.03.21 13:50. Заголовок: Задание 25. №103 ответ не совпадает
Среди целых чисел, принадлежащих числовому отрезку [351627;428763], найдите числа, которые представляют собой произведение двух различных простых делителей. Запишите в ответе количество таких чисел и их среднее арифметическое. Для среднего арифметического запишите только целую часть числа. Мой ответ: 16200 124967. Где я ошибаюсь? var k ,i, p,r,d,col,y, sum: integer; var s: array[1..10] of integer; function prost(x: integer): boolean; var j: integer; flag: boolean; begin k:=0; for j:=1 to x do if x mod j = 0 then k:=k+1; if k=2 then flag:=true else flag:=false; prost:=flag; end; begin sum:=0; for d:= 351627 to 428763 do begin y:=0; for i:=2 to d-1 do if (d mod i = 0) and prost (i) then begin y:=y+1; s[ y]:=i; end; for p:=1 to y-1 do for r :=p+1 to y do if s[ p]*s[ r]=d then begin col:=col+1; sum:=sum+d ; end; end; writeln(col, ' ', sum div col); end.
| |
|
Ответов - 9
[только новые]
|
|
|
Отправлено: 16.03.21 15:25. Заголовок: Думаю, проблема в то..
Думаю, проблема в том, что не хватает типа integer, чтобы записать среднее этих чисел. Попробуйте сделать его longint.
| |
|
|
| Администратор
|
Сообщение: 2580
|
|
Отправлено: 16.03.21 20:29. Заголовок: Василькова пишет: Гд..
Василькова пишет: Я, честно сказать, не понял ваш алгоритм. Почти наверняка проблема в том, что сумма стала очень большой и вышла за пределы 4 байтов. Сумму нужно (в PascalABC.NET) объявить с типом int64. Другой вариант - вести среднее через цикл как вещественное число по рекурсивной формуле, тогда сумму считать не нужно: sred = (sred*(col-1) + d) /col; Вот вариант решения, он работает очень быстро: var i, d, col: integer; sred: double; function prost(x: integer): boolean; var j: integer; flag: boolean; begin flag := true; for j:=2 to round(sqrt(x)) do if x mod j = 0 then begin flag := false; break; end; prost:=flag; end; begin sred := 0; for d:= 351627 to 428763 do for i:=2 to round(sqrt(d)) do if (d mod i = 0) and prost (i) then begin if (i <> d div i) and prost(d div i) then begin col := col + 1; sred := (sred*(col-1) + d) / col; break; end; end; writeln(col, ' ', floor(sred)); end.
| |
|
|
Отправлено: 18.03.21 00:59. Заголовок: Хм... всего-то дел....
Хм... всего-то дел... ## uses School; var ЧислоГодится: integer -> boolean := Число -> begin var ВсеДелители := Число.Divizors; Result := (ВсеДелители.Count = 4) and ВсеДелители[1].IsPrime and ВсеДелители[2].IsPrime end; var Отобрано := Range(351627, 428763).Where(Число -> ЧислоГодится(Число)).ToArray; Print(Отобрано.Count, Trunc(Отобрано.Average)) // Результат 16200 390088
| |
|
|
| Администратор
|
Сообщение: 2588
|
|
Отправлено: 18.03.21 06:47. Заголовок: Alex61 пишет: Хм... ..
Alex61 пишет: Уберите все готовые функции, которые написаны не вами, и модуль school. И будет то же самое.
| |
|
|
Отправлено: 19.03.21 01:23. Заголовок: "И на старуху бы..
"И на старуху бывает проруха" (с) Во-первых, я же Вам не предлагаю писать на Питоне программы, убрав "библиотеки, написанные не Вами", несмотря на то, что Вы цитируете Канта )) А во вторых, библиотеку School написал именно я. Для того, чтобы ей пользовались все желающие. P.S. Поздравляю с новоязом - обращаясь к незнакомым людям писать "Вы" со строчной буквы, - но извините заранее: воспитание не позволяет это принять, поэтому пишу с прописной.
| |
|
|
| Администратор
|
Сообщение: 2599
|
|
Отправлено: 19.03.21 09:17. Заголовок: С точки зрения форма..
С точки зрения формальной сдачи ЕГЭ библиотека school полезна. С точки зрения обучения - сомневаюсь. Было бы логично на время экзамена вырезать её. Но это мои личные взгляды, я их никому не навязываю. P.S. Флейм с переходом на личности заканчиваем. Про правила употребления "Вы" и "вы" можно посмотреть, например, на сайте gramota.ru.
| |
|
|
Отправлено: 19.03.21 11:04. Заголовок: Куда логичнее было б..
Куда логичнее было бы строить задания экзаменационные нешаблонно. Давайте вообще на время экзаменов вырезать все библиотеки, выходящие за пределы реализации примитивного ввода/вывода. ЕГЭ - он по сути своей формален, так что говорить о неформальном подходе не приходится. Ну а Ваше личное мнение я понимаю так: надо вообще все уничтожить, что мешает продвигать Пайтон и всячески показывать его достоинства, скрывая недостатки. Но это уже предмет, лежащий в иной плоскости. Что до ресурса gramota.ru, там однозначно указано, что "Вы" или "вы" в современном русском языке пишут в зависимости от желания указать степень уважения пишущего. Мое мнение - "вы" годится для более короткой дистанции. Врт цитата с упомянутого Вами ресурса: цитата: | вы, вас, вам, вaми, о вас и (как выражение уважения к адресату речи – одному лицу) Вы, Вас, Вам, Вaми, о Вас; ваш, вaше, вaшего, вaша, вaшей, мн. вaши, вaших и (как выражение уважения к адресату речи – одному лицу) Ваш, Вaше, Вaшего, Вaша, Вaшей, мн. Вaши, Вaших (Русский орфографический словарь РАН / Под ред. В. В. Лопатина, О. Е. Ивановой. – 4-е изд., испр. и доп. – М., 2012. С. 70. С. 106). |
| Так что флейм заканчиваю на том, что Ваша же ссылка еще раз убедила меня в своей правоте.
| |
|
|
| Администратор
|
Сообщение: 2601
|
|
Отправлено: 19.03.21 13:39. Заголовок: Alex61 пишет: Давайт..
Alex61 пишет: цитата: | Давайте вообще на время экзаменов вырезать все библиотеки, выходящие за пределы реализации примитивного ввода/вывода. |
|
Все дело в том, что когда учитель (или экзаменатор) дает задание найти, например, все делители числа или перевести число в систему с основанием 6, целью этого задания НЕ является нахождение всех делителей числа или перевод в другую систему. цитата: | а Ваше личное мнение я понимаю так: надо вообще все уничтожить, что мешает продвигать Пайтон и всячески показывать его достоинства, скрывая недостатки. |
|
Заметьте, что это вы сами додумали. цитата: | Ваша же ссылка еще раз убедила меня в своей правоте. |
|
Прочитайте, пожалуйста, там же "Вопросы Справочному бюро".
| |
|
|
Отправлено: 19.03.21 17:57. Заголовок: Alex61 пишет: Все д..
Alex61 пишет: цитата: | Все дело в том, что когда учитель (или экзаменатор) дает задание найти, например, все делители числа или перевести число в систему с основанием 6, целью этого задания НЕ является нахождение всех делителей числа или перевод в другую систему. |
| Вы ведь это пошутили, верно? Поиск всех делителей числа на самом деле не ставит задачи найти все делители числа, а перевод числа в некоторую систему счисления не ставит задачи такого перевода? Это театр абсурда просто. Если Вы хотели сказать, что учителя/преподавателя интересует алгоритм перевода, то причем тут составление программы? А если мы пишем программу, то как может быть, что ее результат не нужен? Написание ради процесса написания? "Фигня - война, а главное маневры" ? И потом, стало быть, в случае сортировки мы можем пользоваться библиотекой и радостно восклицать, как это делают на стримах некоторые забавные приверженцы Пайтона, "... вот! У нас готовая сортировка, а в разных там паскалях такого нет!". Т.е. тут библиотечная сортировка вместо рукописной пузырьковой, вставками или иной Вас не смущает, потому что это Пайтон. А если на занятии учитель хочет увидеть алгоритм, ему никто не мешает потребовать, чтобы библиотек не подключали - и все дела.
| |
|
|
|