Можно ли в 1С проверить, четное чиСло или нет без Цел и циклов? #351998


#0 by Гений 1С
Продолжим, т.к. предыдущая была слишком длинной: Итак, нужно дать решение или доказать, что не существует решения для следующей задачи. Для любого натурального числа нужно проверить, является ли оно четным, с помощью арифметических операций + - / *. При этом нельзя использовать циклы (явные или не явные), число итераци
#0 by Гений 1С
Продолжим, т.к. предыдущая была слишком длинной: Итак, нужно дать решение или доказать, что не существует решения для следующей задачи. Для любого натурального числа нужно проверить, является ли оно четным, с помощью арифметических операций + - / *. При этом нельзя использовать циклы (явные или не явные), число итераци
#0 by Гений 1С
Продолжим, т.к. предыдущая была слишком длинной: Итак, нужно дать решение или доказать, что не существует решения для следующей задачи. Для любого натурального числа нужно проверить, является ли оно четным, с помощью арифметических операций + - / *. При этом нельзя использовать циклы (явные или не явные), число итераци
#1 by Rovan
операции "<", ">" можно ?
#2 by Nefeste
не знаю есть ли в 1С 16-ичные числа и разрешены ли побитовые логические операции условиями задачи, но если бы я писал на сях, то получилось бы что-то вроде такого: inline bool isEven(long x) { return ((x & 0x01) == 0); } ну или аналогично: inline bool isOdd(long x) { return (x & 0x01); }
#3 by Rovan
а рекурсию можно ?
#4 by Гений 1С
Можно, конечно же ветвление. ;-) Рекурсия - это скрытый цикл... Если число циклов не будет пропорционально величине числа, то можно...
#5 by Nefeste
вообще поясните что такое "с помощью арифметических операций + - / *", а конкретно - что значит операция "/"? выполняет деление с остатком?.. или деление нацело? Если речь идет о программировании, то есть такое понятие, как преобразование типов. С потерей дробной части. Тогда решается задача просто: пусть у нас нет оператора {%, mod, остаток от деления, как вам угодно} - ну дак мы его можем легко получить.. mod(x / y) = x - long(x / y) * y; и тогда уже пресловутый x % 2, преобразуясь в  x - long(x / 2) * 2; нам все подскажет про четность числа.. хотя этот вариант уже тоже писали и он чем-то не устроил
#6 by Fragster
достал топик, да! без циклов, если уж на то пошло, и операции * и / не делаются на низком уровне, так что в газенваген!
#7 by Fragster
+ к тому же % выполняется быстрее, чем / ....
#8 by vde69
а чем не устроил пункт 201 из пред. ветки? хотя там есть преобразование в текст, но там нету операций над этим текстом...
#9 by Гений 1С
В текст преобразовывать нельзя!
#10 by Nefeste
вобщем если нам даны только операции /, - и * (плюс нам не нужен) и мы умеем отличать целое (натуральное) число от дробного )), то задача легко решается как это описано, например, в . а если мы не умеем "отбрасывать дробную часть" после деления и после деления натурального числа можем получить вещественное и пытаться анализировать его с помощью одних лишь арифметических операций, то такая задача без циклов решения не имеет...
#11 by Fynjy
log10(x*5+5)-log10(x*5-5) :)
#12 by Злопчинский
очпросто - надо вытянуть из "оперативы" адрес этого целого числа и взять правый бит...
#13 by smaharbA
ты не в теме...
#14 by Гений 1С
Функции нельзя. Блин, ну как-то привести число к нулю и посмотреть, что там в минусе остается   -0.5 или -1... Что то в этом духе, блин... Истина где-то ж рядом...
#15 by Fragster
#16 by Nefeste
ну дак введи в курс дела: что не так написал? как надо, чтобы быть в теме?
#17 by Гений 1С
Ты должен доказать, что задача не имеет решения. Жду доказательства.
#18 by Гений 1С
Ляпнуть, что нет решения любой может, а вот доказать это сложнее
#19 by IT Михаил
условие если оканчивается на 1 3 5 7 9 то , иначе ...
#20 by Живой Ископаемый
А как определить на какую цифру оканчивается число? с помощью указанных арифм. действий...
#21 by Fragster
, если использовать wscript - из 1с его вызвать можно - сдвинуть вправо на 1 бит, сдвинуть влево, сравнить. на сим предлагаю ветку закрыть.
#22 by IT Михаил
в строку и по последнему справа символу )
#23 by Живой Ископаемый
В строку нельзя, отпадает... :(
#24 by Fynjy
Вот ведь вопрос как определить последнюю цифру ... 1*5 = 5 2*5 = 10 3*5 = 15 и т. д. Или цифру после запятой ... 0,5 1 1,5 И т. д. Но мне кажется это не правильный путь ...
#25 by IT Михаил
к и ну!? как это было!?? давайте звание гения сделаем переходящим по голосованию
#26 by Fragster
Таб = СоздатьОбъект("ТаблицаЗначений"); Таб.НоваяКолонка("Достало","Число",10,0); Таб.ДобавитьСтроку; Таб.Достало = ПроверяемоеЧисло/2-0.1; Если Таб.Достало*2 = ПроверяемоеЧисло Тогда  // Четное Иначе  // Нечетное КонецЕсли; и ниипетъ
#27 by IT Михаил
я не пойму почему отпадает, что асфальт этим местом легче ковырять чем отбойным молотком?
#28 by smaharbA
условие - только арифметика
#29 by Живой Ископаемый
Я как-то задался вопросом  - будет ли простое число простым в другой системе исчисления... Даже зачем-то начал проверять... Потом мне сказали, что простыми же бывают только натуральные числа... а какая разница в какой системе исчисления 31 корову или 17 яблок?
#30 by Fragster
не, условие - "в 1с"
#31 by ShoGUN
Хрень какая... Теорема Ферма для 1С-ников :)
#32 by Fynjy
Или как определить целое число или нет, не используя функций - тож не правильный путь ... Вот правильный :) Но вот как составить формулу ... * Сложение и вычитание: o чётное ± чётное = чётное o чётное ± нечётное = нечётное o нечётное ± чётное = нечётное o нечётное ± нечётное = чётное * Умножение: o чётное ? чётное = чётное o чётное ? нечётное = чётное o нечётное ? чётное = чётное o нечётное ? нечётное = нечётное * Деление: o чётное / чётное — может быть любым o чётное / нечётное = чётное, если целое o нечётное / чётное — не может быть целым o нечётное / нечётное = нечётное, если целое
#33 by IT Михаил
Гений, мой вариант принят или нет? он соответствует условию.
#34 by Живой Ископаемый
+ записать
#35 by IT Михаил
без Цел и циклов в 1С я все сделал правильно, словоблудие заканчиватся, я победил
#36 by Fragster
эти данные - основа для рекурсии и 2-х базовых чисел - 1 и 0 как четного и нечетного. Гений сей подход отсеял как непродуктивный
#37 by Fragster
где???
#38 by Fragster
+ вообще в математике половина определений - рекурсивные ;) 2н+1 Р = М/н и тд...
#39 by bahmet
Шёл второй день, нобелёвку так никто и не получил. А ведь путь к решение очевиден....
#40 by bahmet
+Ипанутую задачу с ипанутыми условиями может решить тока полный ипанашка с ипанутой логикой...
#41 by Fragster
павтаряйув 1с без циклов и рекурсий: Таб = СоздатьОбъект("ТаблицаЗначений"); Таб.НоваяКолонка("Достало","Число",10,0); Таб.ДобавитьСтроку; Таб.Достало = ПроверяемоеЧисло/2-0.1; Если Таб.Достало*2 = ПроверяемоеЧисло Тогда // Четное Иначе // Нечетное КонецЕсли; или - с элементами биосопроцессора: Если Вопрос("Число "+Строка(ПроверяемоеЧисло)+" четное?","ДаНет") ="Да" Тогда // четное Иначе // Нечетное КонецЕсли
#42 by dimaldinho
Смущает "в 1С" в заголовке темы. В "1С" можно создать реквизит типа число с точностью 0 и    Исходное = Число;    Число = Число / 2;        Если Исходное = 2 * Число Тогда        Сообщить("Четное");    Иначе        Сообщить("Нечетное");    КонецЕсли; Только это неявное ЦЕЛ.
#43 by Fragster
смотри внимательнее ... и ищи у себя ошибку ;)
#44 by Ненавижу 1С
Некоторая формализация задачи: Работаем только с истинно вещественными числами. То есть будем считать, что выражение вычисляется математически точно (машинно естественно не реализуемо). Без циклов означает, что независимо от входного значения будет использовано не более определенного числа итераций (возможно очень большого), ограниченного для всех входящих параметров одновременно. 1.    Задача эквивалентна определению, что число целое. Достаточно поделить на 2. И наоборот, если целое, то удвоенное четное. 2.    С помощью 4 арифметических операций можно получить дробно-линейные функции. Проверка на условия ><= может выявить знак этой функции (если сравниваем не с 0, то достаточно сделать вычитание этой функции и сравнивать таки с нулем). Эти функции меняют знак конечное число раз! Если условия вложенные, то есть «если то что посчитали>0 тогда посчитать вот это» означает, что на определенном участке знакопостоянства нужно применить другую функцию. 3.    В силу конечности итераций разбиений на знакопостоянные куски будет конечное число. Но нам нужно получить множество целых чисел и только его. А оно дискретно и бесконечно: состоит из бесконечного ряда изолированных точек. Противоречие.
#45 by Гений 1С
сдвигать нельзя, хватит тупить. Условие задачи уже сформировано, нужно или доказать что нет решения, или решить.
#46 by Гений 1С
В строку нельзя, весь прикол в чистой арифметике. Да, действительно, простая задача а решить никто не может... ;-) Харе прикалываться. Ты используешь неявное округление, а округление юзать нельзя. Неужели сложно соблюдать условие задачи, или 1сники не привыкли работать по ТЗ? Не вкурил, можно на примерах. Пока я видел пример с делением на 10 и сравнением с единицей, но он зависит от разрядности числа. Лучше ничего никто не предложил.
#47 by Ненавижу 1С
на каких примерах можно иллюстрировать доказательство несуществования?
#48 by Гений 1С
Короче, я тут за ужином подумал, чуваки. Я действительно гений. Учитесь. Решение сделано в расчете на то, что разрядность хранения чисел в компьютере ограничена, но какая именно разрядность, нас не интересует. Пусть есть некоторое число Х, нужно проверить его четность. Берем в качестве I числа Х, Х+1, Х+2 и для каждого из них проверяем выполнение равенства: I/3 = I/3*3 Если равенство соблюдается, то число I делится на 3 нацело. А тут уже легко подумать о четности X, зная Х и I. Можно проверить, делится ли на 3 число X/2.
#49 by IT Михаил
а в теме этого не написано, как в песочнице, блин
#50 by IT Михаил
отрыл наверно где-то в юном технике 80-го года
#51 by Ненавижу 1С
ты с математикой вообще дружишь?
#52 by КонецЦикла
Можно его забанить?
#53 by Гений 1С
я имел ввиду I = I / 3 * 3 например, 5 <> 5/3*3 т.к. при делении на 3 всегда получается или 3 или 6 в периоде, а т.к. разрядность ограниченная то при умножении на 3 получим другое число. Вот, для числа 3 мы можем проверить, делится или нет на 3 нацело. Где-то рядом и алгоритм на 2.
#54 by ShoGUN
Жжош! :))) С каких пор деление на 2 дает периодическую дробь? :)
#55 by Гений 1С
На 3 деление, на 3... Я пока придумал только как проверить делимость на 3. Числа, которые делятся на 3 идут последовательно - четное нечетное: 3 6 9 12 15.... Т.е. я знаю, как проверить, что число делится на 3 или найти ближайшее число, делящееся на 3. ;-)
#56 by ShoGUN
Для двойки это никак не подходит. Твой способ - это _косвенное_ определение - является ли число переодической дробью. Вопрос - можно ли только с помощью арифметики и условий отличить целое число от дробного в 1С? В этом задачка и заключается.
#57 by ShoGUN
+ А вообще тупняк получается - отобрали один из основных инструментов(цикл) и требуем, чтоб работало и без него... Имхо есть куча задач, которые без цикла решить не получается, не только четность.
#58 by Медвед1Сник
Это не универсальное решение опирающееся чисто на арифметические операции а такое же (по типу) как и у меня где предполагается ограниченная разрядность представимых чисел. Какой же ты гений!? :)))))
#59 by Wasya
>>проверяем выполнение равенства: I/3 = I/3*3 Ничего не понял I/3 = I/3*3 выполняется если I=0
#60 by Гений 1С
быстрее, чем твой метод, потому и без цикла
#61 by Гений 1С
Про трудоемкость алгоритма слыхал? N, n2 log2N? Вот и я хочу чтобы она была небольшой
#62 by Гений 1С
кури тормозим?
#63 by Медвед1Сник
Да, быстрее но уже не "чиста арифметические операции" а это существенное нарушение условий задачи. Мой метод оставался строго в рамках арифметических операций. И для общего (но только общего!) решения требовал бы цикл. Короче ничего лучше своего метода я тут пока не видел. :))))
#64 by ЗлобнийМальчик
неплохая такая трудоемкость - для периодической дроби  для дробной части одноэсия выделит все те 1024 бита и потом будет это  дело умножать/делить сравнивать
#65 by Wasya
Если использовать особенности компьютера или интерпретатора, то и такой код канает: Перем Масс[100000000]; Попытка    Масс[ВыбЧисло/2]=0;    Сообщить("Четное"); Исключение    Сообщить("Нечетное"); КонецПопытки
#66 by Fynjy
Странный ты ... Говоришь арифметически ... А сам пользуешься особенностью количества после запятой ... Так знай гЕний ... Арифметически A = A/3*3 всегда ... Потому что существует возможность формулу выразить в следующем виде ... A/3 = A/3 или A*3 = A*3
#67 by Медвед1Сник
Вот что меня удивило... А нахрена одинэске такие огромные числа? Я имею. в виду 1024битную разрядность. Нахрена спрашивается это в сугубо экономической проге?
#68 by Wasya
Прелагаю свои наметки доказательства невозможности. Решаем задачу: дано число Х опрделеить целое оно или нет. Чтоб доказать что число Х нецелое надо показать, что Х>N и Х<N+1, где N целое число. Эта задача очень похожа на задачу поиска по ключу в отсортированном массиве. Известно, что задача поиска не может быть решена за время быстрее O(logN)
#69 by Kiber
Задача поставлена некорректно. Надо перечислить ВСЕ возможные методы, которыми можно пользоваться. Например: +, -, *, /, ЕСЛИ, <, > При помощи указанных арифметических операций задачу решить невозможно. Нужен либо Цел, либо операция, аналогичная Цел (такие как: Таблицей Значений с ограничениями по количеству знаков после запятой, переводом в строку + Прав, взять байт из памяти).
#70 by Гений 1С
мы считаем число простых операций + - * /, а не циклов на языке 1с
#71 by Медвед1Сник
Или хотя бы тригонометрические функции чтобы преодолеть линейность арифметических операций. Можно что-то с косинусом и синусом замутить.
#72 by Гений 1С
Но ведь делимость на 3 я могу проверить с помощью всего двух операций - деления на 3 и умножения на 3... гыгыгыгы, а вы говорите невозможно...
#73 by Гений 1С
давай без извращений
#74 by Гений 1С
Вот вам еще мысля. 1 2 3 4 5 6 - все при делении на 7 дают периодические дроби. То бишь мы проверяем делимость на 3 и на 7, находим насколько число удалено от ближайшего числа, делящегося на 7 и на 3, исходя из этой инфы получаем четное или нет. Это уже можно проверить на компе. Т.е. проанализировать первые 1000 чисел, для каждого из них вычислить расстояние до ближайшего делящегося на 3 и на 7 числа и посмотреть, какие из них четные, какие нет.
#75 by Медвед1Сник
Ну I <> I / 3 * 3 скорее извращения. :) А синус-косинус могутпомочь правда это уже иррациональные числа, пи опять таки. И операции не определяемые алгоритмически т.е. нет такого алгоритма который за конечно число шагов вычислить синус какого-то числа. :))))))
#76 by AAZ
Подсчитал я тут количество прохождений по циклам в своем варианте. Получил следующую картину: 22 для 11 36 для 100 58 для 111 73 для 1011 87 для 1100 109 для 1111 125 для 10111 140 для 11011 154 для 11100 176 для 11111 193 для 101111 209 для 110111 224 для 111011 238 для 111100 260 для 111111 278 для 1011111 295 для 1101111 311 для 1110111 326 для 1111011 340 для 1111100 362 для 1111111 Это к вопросу об эффективности алгоритма :) Можно, конечно, подчитать именно число арифметических операций... Но порядок от этого не сильно изменится - чем больше число, тем эффективней
#77 by Kiber
Точно так-же можно проверить делимость на любое простое число, кроме 2 :-))
#78 by Гений 1С
На 5 не получится
#79 by Kiber
+ 1 2 и 5 =))) Извиняюсь)
#80 by Гений 1С
Написал код: Функция ПоискДелителя(Знач Ч, Делитель)    Пока Истина Цикл        Если Ч % Делитель = 0 Тогда            Возврат Ч;        КонецЕсли;                Ч=Ч+1;    КонецЦикла; КонецФункции Функция ___обВывестиТаблицуЗначений(П) Экспорт #Если Клиент Тогда    Перем        ТЗ,        Макет,        Т,        ПараметрыШапки,        ПараметрыПодвала,        ИмяШапки,            ИмяСтроки,        ИмяПодвала,        Показывать,        РасчитыватьИтоги,        НачальнаяСтрока, ЗаголовокОкна;            П.Свойство("ЗаголовокОкна", ЗаголовокОкна);    П.Свойство("ТЗ", ТЗ);    П.Свойство("Макет", Макет);    П.Свойство("Т", Т);    П.Свойство("ПараметрыШапки", ПараметрыШапки);    П.Свойство("ПараметрыПодвала", ПараметрыПодвала);    Если НЕ П.Свойство("ИмяШапки", ИмяШапки) Тогда        ИмяШапки="Шапка";    КонецЕсли;    Если НЕ П.Свойство("ИмяСтроки", ИмяСтроки) Тогда        ИмяСтроки="Строка";    КонецЕсли;    Если НЕ П.Свойство("ИмяПодвала", ИмяПодвала) Тогда        ИмяПодвала="Подвал";    КонецЕсли;    Если НЕ П.Свойство("Показывать", Показывать) Тогда        Показывать=Истина;    КонецЕсли;    Если НЕ П.Свойство("РасчитыватьИтоги", РасчитыватьИтоги) Тогда        РасчитыватьИтоги=Истина;    КонецЕсли;        //Если таблица не задана, создаем ее    Если Т=Неопределено Тогда        Т=Новый ТабличныйДокумент;        НачальнаяСтрока=1;    Иначе        НачальнаяСтрока=Т.ВысотаТаблицы+1;    КонецЕсли;            //Выводим шапку через макет    Если ИмяШапки<>Неопределено И Макет<>Неопределено Тогда        Шапка=Макет.ПолучитьОбласть(ИмяШапки);        Если ПараметрыШапки<>Неопределено Тогда            Шапка.Параметры.Заполнить(ПараметрыШапки);        КонецЕсли;        Т.Вывести(Шапка);    Иначе        //выводим шапку непосредственно в ячейки        Для Каждого Кол ИЗ ТЗ.Колонки Цикл            Заг=СокрЛП(Кол.Заголовок);            Заг=?(Заг="",Кол.Имя, Заг);            Т.Область(НачальнаяСтрока, 1+ТЗ.Колонки.Индекс(Кол), НачальнаяСтрока, 1+ТЗ.Колонки.Индекс(Кол)).Текст=Заг;        КонецЦикла;    КонецЕсли;    Для Каждого Стр ИЗ ТЗ Цикл        Если ИмяСтроки<>Неопределено И Макет<>Неопределено Тогда            Строка=Макет.ПолучитьОбласть(ИмяСтроки);            Строка.Параметры.Заполнить(Стр);            Т.Вывести(Строка);        Иначе            //выводим строки            Для Каждого Кол ИЗ ТЗ.Колонки Цикл                Т.Область(НачальнаяСтрока+1+ТЗ.Индекс(Стр), 1+ТЗ.Колонки.Индекс(Кол), НачальнаяСтрока+1+ТЗ.Индекс(Стр), 1+ТЗ.Колонки.Индекс(Кол)).Текст=Стр[Кол.Имя];            КонецЦикла;        КонецЕсли;    КонецЦикла;        Если ИмяПодвала<>Неопределено И Макет<>Неопределено Тогда        Подвал=Макет.ПолучитьОбласть(ИмяПодвала);        Если РасчитыватьИтоги=истина Тогда            ПараметрыИтогов=Новый Структура;            Для Каждого Кол ИЗ ТЗ.Колонки Цикл                ПараметрыИтогов.Вставить(Кол.Имя, ТЗ.Итог(Кол.Имя));            КонецЦикла;            Подвал.Параметры.Заполнить(ПараметрыИтогов);        КонецЕсли;                Если ПараметрыПодвала<>Неопределено Тогда            Подвал.Параметры.Заполнить(ПараметрыПодвала);        КонецЕсли;        Т.Вывести(Подвал);    КонецЕсли;        Если Показывать Тогда        Т.Показать(ЗаголовокОкна);    КонецЕсли;    Возврат Т; #КонецЕсли КонецФункции ТЗ=Новый ТаблицаЗначений; ТЗ.Колонки.ДОбавить("Четное"); ТЗ.Колонки.ДОбавить("Р3"); ТЗ.Колонки.ДОбавить("Р7"); Для Инд = 1 по 1000 Цикл    Р3 = ПоискДелителя(Инд, 3);    Р7 = ПоискДелителя(Инд, 7);    Стр=ТЗ.Добавить;    Стр.Четное = Инд % 2 = 0;    Стр.Р3 = Р3 - Инд;    Стр.Р7 = Р7 - Инд; КонецЦикла; ТЗ.Свернуть("Четное, Р3, Р7", ""); ТЗ.Сортировать("Р3, Р7"); ___обВывестиТаблицуЗначений(Новый Структура("ТЗ", ТЗ)); Получил ТЗ: Четное    Р3    Р7 ложь         истина         ложь        1 истина        1 истина        2 ложь        2 ложь        3 истина        3 истина        4 ложь        4 ложь        5 истина        5 ложь        6 истина        6 ложь    1     истина    1     истина    1    1 ложь    1    1 ложь    1    2 истина    1    2 ложь    1    3 истина    1    3 ложь    1    4 истина    1    4 ложь    1    5 истина    1    5 ложь    1    6 истина    1    6 истина    2     ложь    2     ложь    2    1 истина    2    1 ложь    2    2 истина    2    2 ложь    2    3 истина    2    3 ложь    2    4 истина    2    4 истина    2    5 ложь    2    5 истина    2    6 ложь    2    6 Не, не канает, от делителей 3 и 7 на одинаковом растоянии всегда есть и четные и нечетные числа
#81 by Гений 1С
Это ты кому?
#82 by Гений 1С
ТЗ=Новый ТаблицаЗначений; ТЗ.Колонки.ДОбавить("Четное"); ТЗ.Колонки.ДОбавить("Р3"); ТЗ.Колонки.ДОбавить("Р7"); ТЗ.Колонки.ДОбавить("Р3_2"); ТЗ.Колонки.ДОбавить("Р7_2"); Для Инд = 1 по 1000 Цикл    Р3 = ПоискДелителя(Инд, 3);    Р7 = ПоискДелителя(Инд, 7);    Р3_2 = ПоискДелителя(Р7, 3);    Р7_2 = ПоискДелителя(Р3, 7);    Стр=ТЗ.Добавить;    Стр.Четное = Инд % 2 = 0;    Стр.Р3 = Р3 - Инд;    Стр.Р7 = Р7 - Инд;    Стр.Р3_2 = Р3_2 - Инд;    Стр.Р7_2 = Р7_2 - Инд; КонецЦикла; ТЗ.Свернуть("Четное, Р3, Р7, Р3_2, Р7_2", ""); ТЗ.Сортировать("Р3, Р7, Р3_2, Р7_2"); Все то же самое, блин...
#83 by wertyu
а чем тебя тогда Чётное = (Число % 2 = 0) не устраивало?
#84 by Kiber
Ну, если циклы разрешены, то не легче-ли от осходного числа отнимать ближайшуюю степень числа 2, пока оно не станет равным 0 или 1? =)
#85 by wertyu
уже даже "%" разрешено :)))))
#86 by Гений 1С
ты не в теме, отдыхай дальше... Это не вопрос, как проверить четность в 1с, это вопрос, можно ли арифметически проверить четность и трудоемкость этого алгоритма.
#87 by AAZ
Признаки делимости Признак делимости на 2. Число, делящееся на 2, называется чётным, не делящееся на 2 – нечётным. Число делится на 2 тогда и только тогда, когда его последняя цифра делится на 2. Признак делимости на 5. Число делится на 5 тогда и только тогда, когда его последняя цифра – 5 или 0. Признак делимости на 25. Число делится на 25 тогда и только тогда, когда две его последние цифры либо нули, либо образуют число, делящееся на 25. Признаки делимости на 10, 100, 1000. Число делится на 10 тогда и только тогда, когда его последняя цифра – 0. Число делится на 100 тогда и только тогда, когда две его последние цифры – нули. Число делится на 1000 тогда и только тогда, когда три его последние цифры – нули. Признак делимости на 4. Число делится на 4 тогда и только тогда, когда две его последние цифры – нули, либо когда двузначное число, образованное двумя его последними цифрами, делится на 4. Признак делимости на 3. Число делится на 3 тогда и только тогда, когда сумма его цифр делится на 3. Признак делимости на 9. Число делится на 9 тогда и только тогда, когда сумма его цифр делится на 9. Признак делимости на 11. Число делится на 11 тогда и только тогда, когда сумма его цифр, стоящих на нечётных местах, либо равна сумме цифр, стоящих на чётных местах, либо отличается от неё на число, кратное 11.
#88 by Гений 1С
С циклом решение известно. Трудоемкость log 10 (N). Надо быстрее. С какого бодуна? Я не разрешал
#89 by Гений 1С
Ты к чему это ляпнул? Сказал А говори и Б, или не флудераствуй.
#90 by wertyu
на свой код посмотри....
#91 by AAZ
Это к вопросу от делимости на 3 (ну, и т.д.)
#92 by Гений 1С
Мой код не решение, а исследование расстояния... Не путай мелкое с теплым
#93 by Гений 1С
В твоем сабже я не нашел ни слова про периодические дроби, которые получаются при делении на 3 и 7.
#94 by Kiber
Точнее легче по другому Перем ИсходноеЧисло, Дельта, СтепеньДвойки; ТеньЧисла = 0; Пока (ИсходноеЧисло-ТеньЧисла) > 1 Цикл    СтепеньДвойки = 1;    Пока (ТеньЧисла+2^СтепеньДвойки) < ИсходноеЧисло Цикл        СтепеньДвойки = СтепеньДвойки+1;    КонецЦикла;    ТеньЧисла = ТеньЧисла + 2^(СтепеньДвойки-1); КонецЦикла; Если ИсходноеЧисло = ТеньЧисла Тогда    Возврат("Чет"); Иначе    Возврат("Нечет"); КонецЕсли;
#95 by Гений 1С
Хватит извращаться с циклами. такое решение мы знаем и его трудоемкость LOG 10 (N). Нужно что-то пооригинальнее.
#96 by wertyu
про периодические дроби можно было вообще не упоминать - для простых чисел длина периода равна p - 1, т.е. цикл даже длиннее, чем при факторизации числа
#97 by Asirius
ответ на из пред. топика. Сам обломись! А кто мешает нам запускать функцию, написанную с ограничениями из не только на натуральных числах, но и на вещественных??? Вот ты накодил эту функцию ПроверкаЧетности(ПроверяемоеЧисло) для целых чисел, а я потом, как самый злостный бета-тестер, возьму и запущу: Сообщить(ПроверкаЧетности(1.239)) Какой результат она мне выдаст???? Повиснет? В лучшем случае вылетит ошибка деления на 0, но и то эта ошибка может вылетать только на конечном количестве отрезков вещественных чисел!
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С