Числа Смита, Нестандартное условие задачи |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Числа Смита, Нестандартное условие задачи |
Relrin |
4.11.2010 18:18
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
Видел здесь в FAQ решение для супер-чисел Смита решение в виде функций. Так вот, мне подкинули похожую задачку, только сказали чтобы делать ее без функций... Прошу помощи!
Чуть не забыл, про условие задачи: Составное число называется числом Смита, если сумма его цифр равна сумме цифр всех чисел, образующихся разложением исходного числа на простые множители. Число Смита называется супер-числом Смита, если сумма его цифр является числом смита. Найти супер-число Смита с номером N, являющееся полным квадратом. (Число называется полным квадратом, если корень квадратный из него является простым числом) Проблема в коде ниже в том, что у меня находит числа до 6(N=6) включительно, а это число 10201, а дальше не хватает "числового пространства". Плюс смущает его получение числа из под корня... Из числа 22, или 202 или 1111, например, как результаты поиска таких супер-чисел, целое число не получается, но его программа считает как целое... Мое решение:
Сообщение отредактировано: Relrin - 4.11.2010 18:18 |
volvo |
4.11.2010 18:53
Сообщение
#2
|
Гость |
Цитата а дальше не хватает "числового пространства" А ты в FAQ-е функцию внимательно посмотри, значение какого типа она возвращает? Там же хватает "числового пространства", так ведь? Вот и используй тот же тип при вычислениях. |
Relrin |
4.11.2010 18:59
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
А ты в FAQ-е функцию внимательно посмотри, значение какого типа она возвращает? Там же хватает "числового пространства", так ведь? Вот и используй тот же тип при вычислениях. Мы возвращаем целое число. Т.к. переменная square используется лишь при проверке супер-числа Смита. Но проблема всеравно ж открыта... Но у меня подозрения выходит именно на кусок кода, где мы делаем проверку, чтобы это число из корня квадратного являлось простым числом, хотя там, вроде как, все правильно...
|
volvo |
4.11.2010 19:14
Сообщение
#4
|
Гость |
Цитата Мы возвращаем целое число. Целые числа бывают РАЗНЫЕ. Разной емкости. Бывает Байт, который хранит значения 0 - 255, бывает Integer, который хранит -31768 .. 32767, а бывает тот тип, который использовал я - LongInt, который хранит значения до двух миллиардов.Еще одна проблема - это то, что высказывание Цитата у меня находит числа до 6(N=6) включительно, а это число 10201 не является правдой. 10201 это третий СуперСмит, который является полным квадратом, а не шестой.Добавлено через 4 мин. Цитата Число называется полным квадратом, если корень квадратный из него является простым числом Неправильно. Полный квадрат - это число, квадратный корень из которого является целым числом. В таком случае проверка SSmith на полный квадрат сводится к одной строке:isFullSqr := (Sqr(Trunc(Sqrt(SSmith))) = SSmith); |
Relrin |
4.11.2010 19:46
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
Добавлено через 4 мин. Неправильно. Полный квадрат - это число, квадратный корень из которого является целым числом. В таком случае проверка SSmith на полный квадрат сводится к одной строке: isFullSqr := (Sqr(Trunc(Sqrt(SSmith))) = SSmith); Ммм.... А где это заменить в этом коде? Всмысле что на что заменить, чтобы условие выполнялось? А то если заменить, этот кусочек кода вместо предыдущей проверки на полный квадрат, то программа просто выводит супер-числа Смита... Сообщение отредактировано: Relrin - 4.11.2010 19:51 |
TarasBer |
4.11.2010 20:11
Сообщение
#6
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> где это заменить в этом коде?
Палишься. Спроси у того, кто код писал. -------------------- |
Relrin |
4.11.2010 20:29
Сообщение
#7
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
> где это заменить в этом коде? Палишься. Спроси у того, кто код писал. Ничего я не палюсь, не неси чепухи Код писал я и та подстановка:
Она не подходит под условие задачи... Потому что возвести в квадрат то число, из которого мы извлекали корень ничего не меняет... Мы получим то же самое число. То есть у нас не будет проверки тут на то, какое число - простое и составное... |
TarasBer |
4.11.2010 20:38
Сообщение
#8
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Что делает Trunc - знаешь?
Вот примени этот код для числа 5. -------------------- |
volvo |
4.11.2010 20:46
Сообщение
#9
|
Гость |
Цитата То есть у нас не будет проверки тут на то, какое число - простое и составное... Опять он за свое. Тебе НЕ НАДО проверять простоту числа, пойми это. Тебе надо проверить, что возведение целой части корня в квадрат дает то же число, а не меньшее. Всё. Этого достаточно, чтобы число являлось полным квадратом. |
Relrin |
4.11.2010 20:47
Сообщение
#10
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
|
TarasBer |
4.11.2010 20:50
Сообщение
#11
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> Потому что возвести в квадрат то число, из которого мы извлекали корень
Если ты знаешь, что такое Trunc, то почему ты говоришь "то число, из которого извлекали"? Не, не то число, другое, округлённое. Админ, кнопки сломались, Опера 9.26 -------------------- |
Relrin |
4.11.2010 20:54
Сообщение
#12
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
Если ты знаешь, что такое Trunc, то почему ты говоришь "то число, из которого извлекали"? Не, не то число, другое, округлённое. Ну, попробуй тогда сначала под корень число 22 занести, потом в квадрат занести - сомневаюсь, что будет такое же число, как до вычислений. Вообщем пока получилось так:
Для проверки я указал N=2, результат - ^C ... |
TarasBer |
4.11.2010 21:04
Сообщение
#13
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> Ну, попробуй тогда сначала под корень число 22 занести, потом в квадрат занести - сомневаюсь, что будет такое же число, как до вычислений.
Офигеть, а в 7 посте ты что говорил? > Код писал я и та подстановка [...] не подходит под условие задачи... Потому что возвести в квадрат то число, из которого мы извлекали корень ничего не меняет... Мы получим то же самое число. -------------------- |
Relrin |
4.11.2010 21:29
Сообщение
#14
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
Ну, я немного изменил условия проверки, чтобы подходило под
И получил так:
Только у меня никак не получается так, чтобы число 10201 было третьим супер-числом Смита, соответствующие условию задачи. У меня получается, что третьим таким числом будет 121, вторым - 22. Ну тут у меня получилось так, что я вернулся к тому, с чего начал... |
TarasBer |
4.11.2010 21:37
Сообщение
#15
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
22 не является полным квадратом, оно не подходит.
Как проверять число на полную квадратность - тебе сказали. В чём проблема? -------------------- |
Relrin |
4.11.2010 21:48
Сообщение
#16
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
22 не является полным квадратом, оно не подходит. Как проверять число на полную квадратность - тебе сказали. В чём проблема? Да не получается что-то... В проверке пришел к такому коду:
Но результаты, что и в предыдущем посте получаются... |
TarasBer |
4.11.2010 22:03
Сообщение
#17
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
После проверки с разложением на простые множители допиши
if Sqr(Trunc(Sqrt(SSmith))) <> SSmith then simple:=false; И не надо использовать бульшит. if a=false успешно заменяется на if not a, а такая конструкция, как if a = true then b := true else b := false, увековечена на говнокоде, потому что можно просто написать b := a; -------------------- |
Relrin |
4.11.2010 22:16
Сообщение
#18
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
После проверки с разложением на простые множители допиши if Sqr(Trunc(Sqrt(SSmith))) <> SSmith then simple:=false; И не надо использовать бульшит. if a=false успешно заменяется на if not a, а такая конструкция, как if a = true then b := true else b := false, увековечена на говнокоде, потому что можно просто написать b := a; Дописал, но происходит зацикливание программки...
|
TarasBer |
4.11.2010 22:42
Сообщение
#19
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Ну или не туда вставь. Я не знаю, не я же программу писал. Тебе лучше знать, программу же ты, говоришь, писал.
-------------------- |
Relrin |
5.11.2010 7:58
Сообщение
#20
|
Пионер Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 0 |
UP
|
Текстовая версия | 27.04.2024 21:34 |