Имя: Пароль:
IT
 
Как определить, что число делится на 10?
0 sda553
 
18.01.14
15:44
Дано число. В двоичной записи 8*1024 бита.Есть ли какой то алгоритм, позволяющий быстро определить, что число делится на 10?
1 Пеппи
 
18.01.14
15:49
Любое число делится на 10 :)
2 К_Дач
 
18.01.14
15:49
http://ru.wikipedia.org/wiki/Признаки_делимости
3 minsk1s
 
18.01.14
15:55
(0) если ты имеешь ввиду результат=целое число. в одинэске прокатывает такая формул
Если (ТвоёЧисло/10)=Окр(ТвоёЧисло/10) Тогда
  //делится на 10
Конецесли:
4 wertyu
 
18.01.14
15:55
(0) 10 - это 10 или 2?
5 gr13
 
18.01.14
15:58
(3) не смешно, если последнее число "0" в числе "1230", то на "0" делится. Не кажется ли тебе, что достать последний 0 из числа проще и быстрее чем делить на 0?
6 gr13
 
18.01.14
15:58
(+5) ...делить на 10
7 КонецЦикла
 
18.01.14
16:02
Если Число % 10 = 0
8 wertyu
 
18.01.14
16:03
я что ли один понял, что число дано в двоичном виде?
9 wertyu
 
18.01.14
16:06
в общем если надо делить на 2 (десятичное), то если последний знак будет 0, если 10 (десятичное), то наверно разбить на две подзадачи, проверить деление на 2 (десятичное) и на 5 (не знаю, если правило)
10 gr13
 
18.01.14
16:11
(8) а что такое 0 в двоичном коде?
11 wertyu
 
18.01.14
16:12
(10) 0 это 0, а что с ним не так?
12 gr13
 
18.01.14
16:14
(10) http://planetcalc.ru/375/
520 1000001000
521 1000001001
522 1000001010 (не фурычит)))
13 Юлия Цветочек
 
18.01.14
16:34
Признак Паскаля — универсальный признак делимости, позволяющий для любых целых a и b определить, делится ли a на b. Точнее, он позволяет вывести почти все из выше приведённых признаков.

ПРИМЕР
Пусть дано число и найдем сумму всех тетрад::

00101011110001111100011000101000 => 2 + 11 + 12 + 7 + 12 + 6 + 2 + 8 = 60

Если полученная сумма кратна 10 - число делится на 10.
Можно это проверить на любом числе, меньше 10000.
14 KRV
 
18.01.14
16:37
Ха.. да если я захочу, то я и на ноль делить буду сколько не лень будет!
15 Базис
 
naïve
18.01.14
16:37
Половину чисел можешь делимостью на 2 отмести, остальные я бы честно делил.

(13) Доцент ты, а не цветочек.
16 spectre1978
 
18.01.14
16:52
(0) проверить, равен ли остаток от деления 0
Если МоеЧисло % 10 = 0 Тогда
// делится на 10
Иначе
// не делится на 10
КонецЕсли
17 sda553
 
18.01.14
17:02
(13)
10010001
тетрады 9 и 1
в сумме 10
однако исходное число, очевидно, на 10 не делится
чяднт?
18 sda553
 
18.01.14
17:04
(15) ты просто свел задачу к тому, как проверить, что число делится на пять
19 wertyu
 
18.01.14
17:09
(17) походу последние 4 надо умножать так
берём из 00101011110001111100011000101000 1000 и умножаем
1*0+0*8+0*4+0*2=0 - делится
20 sda553
 
18.01.14
17:14
(19) не понял
21 andrewalexk
 
18.01.14
17:15
:) мда...дожили..
22 Живой Ископаемый
 
18.01.14
17:20
(1) 0 не делится на 10, что ты с ним ни делай
23 andrewalexk
 
18.01.14
17:24
(22) :) попался гуманитарий!
зы
любое число делится на любое число...просто иногда получаются неопределенности
24 Пеппи
 
18.01.14
17:27
Только на ноль поделить нельзя, но KRV говорит что может)
25 andrewalexk
 
18.01.14
17:30
:) еще один...у них тут косяк!
26 Пеппи
 
18.01.14
17:32
(25) ну может он особенный :)
27 Живой Ископаемый
 
18.01.14
17:33
Блин, точно... Совсем уже....
28 wertyu
 
18.01.14
17:40
(20) да, чего я прогнал, нашел признак для 16
29 wertyu
 
18.01.14
17:47
нулевой коэфф всегда 1
второй 1*2 mod 10 == 2
третий 2*2 mod 10 == 4
четвёртый 4*2 mod 10 == 8
пятый 8*2 mod 10 == 6
шестой 6*2 mod 10 == 2 <- цикл
00101011110001111100011000101000
84268426842684268426842684268421
00208026840004268400042000208000 <- тут поциферное произведение первой строки на вторую
= 70 (это сумма всех цифр)
30 wertyu
 
18.01.14
17:48
для твоего из (17)

10010001
84268421
80060001 = 15
31 sda553
 
18.01.14
18:12
Я уже нашел способ, почти как в 13 только правильнее так:
00101101111011111010
Первый бит справа очевидно должен быьть 0 иначе конец алгоритма и число не делится на 10.
Складываем сумму тетрад без первого бита
0001+0110+1111+0111+1101=1+6+15+7+13=42 (достаточно последней цифры 2)
и если эта сумма делится на пять, то все число делится на 10
32 wertyu
 
18.01.14
18:19
(31) нет, неправильно, надо складывать триады и проверять деление на 5, плюс доп условие, последний бит = 0

из это следует из правила для пяти

там коэффциенты 1,2,4 в цикле, что фактически сумма триад
33 wertyu
 
18.01.14
18:24
00101101111011111010

00+101+101+111+011+111+010=0+5+5+7+3+7+2=29 на пять не делится и остаток 4, хотя последний бит ноль
34 wertyu
 
18.01.14
18:26
(31) тебе даже 42 mod 5 == 2 показывает, что это неправильно, т.к. реальный остаток равен 4
35 КонецЦикла
 
18.01.14
18:29
Переводить в десятичную еще не предлагали?
36 wertyu
 
18.01.14
18:30
(35) строку из 1024 байт?
37 KRV
 
18.01.14
18:46
(24),(25) мой ноль! Хочу - делю, не хочу - не делю.. и вообще - мой ноль он, зараза, хитрый.. чему он чичаз равен я не знаю - как скажет, так и будет!
38 sda553
 
18.01.14
19:20
(34) 42=(двоично)=101010
разбиваем на тетрады без правого бита
101010=000101010=0001_0101_0
первая тетрада 1
вторая тетрада 5
5+1=6
т.е. на пять не делится, значит все число не делится на 10
39 andrewalexk
 
18.01.14
19:23
(37) ?) покажи документы на ноль
40 User_Agronom
 
18.01.14
19:24
(8) Вы путаете число и форму записи числа. Даже если Вы напишите римскими цифрами суть числа не измениться.
41 sda553
 
18.01.14
19:34
(34) остаток от деления на 10 то же легко найти.
сумма тетрад без правого бита делим на 5 получаем остаток. Остаток умножаем на 2 и прибавляем правый бит.
Для (38) это будет
(6 mod 5)*2+0=2
42 wertyu
 
18.01.14
19:45
(40) я ничего не путаю, число записано в двоичном виде, надо по этому представлению определить делится оно на 10 или нет
43 wertyu
 
18.01.14
19:51
(38) ты походу опять не понял, в (13) есть указание, что можно использовать Признак Паскаля
посмотреть в можешь вики, там пример для десятичной системы,
чтобы использовать для двоичной, надо во все формулы определения остатков вместо 10 подставить 2

я расписал тебе признак делимости для 10 и для 5, т.е. опеределил коэффициенты

10:
нулевой коэфф всегда 1
второй 1*2 mod 10 == 2
третий 2*2 mod 10 == 4
четвёртый 4*2 mod 10 == 8
пятый 8*2 mod 10 == 6
шестой 6*2 mod 10 == 2 <- цикл

5:
0й - 1
1й - 2
2й - 4
3й - 1 <- цикл

т.е. фактически для пяти получается, что признаком будет сложение триад
44 sda553
 
18.01.14
19:59
Все правильно, только не триад, а тетрад.
Пример число 26
В двоичной записи это 011010
В триадах это
011_010
т.е. 3 и 2. В сумме будет пять. Однако 26 на пять не делится
-------
А теперь правильно разбиваем на тетрады
00011010 в триадах это
0001_1010
т.е. 1 и 10, в сумме 11
Остаток от деления на пять 1, правильно
--------
Таким образом тепер получается следующий алгоритм. Двоичное число делится на 10 если сумма его тетрад делится на 5 и последний бит 0.
45 wertyu
 
18.01.14
20:01
(44) не упорствуй, коэффициентов всего три 1,2,4, ну нет там коэффициента 8 для тетрады, хотя бы потому как 8 больше 5
46 sda553
 
18.01.14
20:02
(45) Объясни как определить твоим способом остаток от деления на пять числа 26 (011010)?
47 wertyu
 
18.01.14
20:14
(46) да ты почти прав, я с коэффициентами ошибся, вернее с их количеством, но не это делает твой способ верным

5:
0й - 1
1й - 2
2й - 4
3й - 3
4й - 1 <- цикл

011010
268421=6+8+2=16 16 mod 5 == 1

00101011110001111100011000101000
34213421342134213421342134213421
00203021340004213400042000203000=5+6+11+11+7=40

если посмотреть на коэффициенты, то видно

3, 4, 2, 1 и если к 3 прибавить 5, которое на результат деления не повлияет, то получим
8, 4, 2, 1
48 sda553
 
18.01.14
20:17
(47) да я пока и не говорил, что именно делает мой способ верным. Посидел посчитал и пришел к такому способу. Ты посчитал по своему, вначале ошибся и я тебя поправил
49 wertyu
 
18.01.14
20:26
(48) это не мой, это Паскаля ) там доказательство довольно простое, поэтому если не сходится, значит ошибся с коэффициентами
50 Salimbek
 
18.01.14
20:31
(0) двоичное число преобразуется в десятичное как
1*б1+2*б2+4*б3+8*б4+16*б5+32*б6+64*б7+... Если рассмотреть остаток от деления этого на 10, то получим:
1*б1+2*б2+4+б3+8*б4+6*б5+2*б6+4*б7+... (повторяются циклически коэффициенты 2, 4, 8, 6)
Ну и если получается большое число в сумме, то повторить алгоритм еще раз
51 wertyu
 
18.01.14
20:33
(50) см (29)
52 Salimbek
 
18.01.14
20:34
(51) а... ну да
53 wertyu
 
18.01.14
20:36
(52) ТС выбрал комби, признак на 5 (сложение тетрад со предпоследнего и бита и чётность последнего бита)
54 Salimbek
 
18.01.14
20:41
+(52) Только число 70 тоже разложить 70=
1000110
4268421
-------
4000420 = дает в сумме 10, т.е. делится на 70 ;-)
(53) Это, кстати, частный случай, т.е. коэффициенты становятся только в 2 раза меньше, в частности для 70=1000110 - отбрасываем последний бит=> 100011 и для него строим в цикле коэффициенты
100011
213421
------
200021 - сумма дает 5, т.е. 70 делится на 5 и за счет проверки последнего бита на равенство 0 = получаем что все число делится на 10
55 Принт
 
18.01.14
20:43
пока самый быстрый вариант поделить на 10
56 wertyu
 
18.01.14
20:47
(55) строку из 0 и 1?
57 Salimbek
 
18.01.14
20:49
(55) смогешь быстро поделить двоичное: 101010101010101010101010101010101010101010101010101101011010101010101010101001010101001011101010110001111101101101000111001001001011101010111001100110
58 wertyu
 
18.01.14
20:50
(54).2 если там строка, я думаю проще всё-таки складывать справа на лево коэффициенты 5 или 10, а от комби взять проверку последнего бита, для сокращения работы алгоритма при очевидном итоговом результате
59 Salimbek
 
18.01.14
20:50
в (57) при этом всего 150 знаков, в условии (0) в 54 раза больше
60 wertyu
 
18.01.14
20:52
+(58) ну тупо
Если СимволСтроки = "1" Тогда
Сумма = Сумма + КоэффициентПоПорядку;
КонецЕсли;
61 wertyu
 
18.01.14
20:54
+(60) а сам коэффициент определять из счетчика цикла
62 xReason
 
18.01.14
20:55
Если нацело,то в конце 0 , тут горе программеры делят его зачем-то ))))))
63 wertyu
 
18.01.14
20:56
(62) ещё один провокатор )
64 Salimbek
 
18.01.14
20:56
(60) ну да, по очереди берешь коэффициент и прибавляешь, итоговая сумма не превысит 81920, что позволяет проверить и тупо делением.
(62) Двоичное число, для примера, я привел в (57). Проверь...
65 xReason
 
18.01.14
20:56
могу рассказать, как узнать делятся или на 5,2,3 и 9

вот горе от ума - перемудрили
66 wertyu
 
18.01.14
20:57
(65) валяй
67 Salimbek
 
18.01.14
20:58
слишком длинно получилось, поделю в несколько строк:
Итак, (65) предлагаю сказать, делится ли на 10 число (в двоичной записи)
10101010101010101010101010101010101010101010101010110101101010
10101010101010010101010010111010101100011111011011010001110010
01001011101010111001100110
68 xReason
 
18.01.14
20:58
(66) система десятичная?
69 sda553
 
18.01.14
20:59
(53) я уже упростил, для деления на пять можно разбивать на триады даже с последним битом.
70 wertyu
 
18.01.14
20:59
(68) двоичная
71 xReason
 
18.01.14
20:59
(70) я сегодня только с поллитровой работаю
72 wertyu
 
18.01.14
20:59
(69) тетрады )
73 sda553
 
18.01.14
21:00
(72) да, оговорка. Конечно на тетрады
74 Принт
 
18.01.14
21:00
(56) про строки ничего сказано не было
75 wertyu
 
18.01.14
21:01
(74) "Дано число. В двоичной записи 8*1024 бита"
76 wertyu
 
18.01.14
21:02
(73) ну в общем то да, смещения вправо (деления на 2) не требуется
77 wertyu
 
18.01.14
21:08
СтрокаБитов = "01100101"; // хз как ты её там получаешь
ДлинаБитов = СтрДлина(СтрокаБитов);
Сумма = 0;
Для НС = 0 По ДлинаБибов - 1 Цикл
СимволСтроки = Сред(СтрокаБитов, ДлинаБитов - НС, 1);
Если СимволСтроки = "1" Тогда
КоэффициентПоПорядку = Pow(2, НС % 4);
Сумма = Сумма + КоэффициентПоПорядку;
КонецЕсли;
КонецЦикла;
78 wertyu
 
18.01.14
21:09
КоэффициентПоПорядку = Pow(2, НС % 4);
Сумма = Сумма + КоэффициентПоПорядку;

в одну строку

Сумма = Сумма + Pow(2, НС % 4);
79 sda553
 
18.01.14
21:14
(77) На самом деле все в моем частном случае проще у меня это число записано в шестнадцатеричной строке вида
0xffe3a578
Так что достаточно просто вычислять f+f+e+3+a+5+7+8
80 sda553
 
18.01.14
21:30
Кстати, суммой тетрад можно проверять делимость двоичного числа вообще на любое простое число (кроме 2 которое проверяется элементарно)
81 Принт
 
18.01.14
21:32
(80) почему именно тетрад?
82 wertyu
 
18.01.14
21:32
(80) например возьмём 7
83 sda553
 
18.01.14
21:32
(80) а нет, гон.
84 wertyu
 
18.01.14
21:34
(83) вот для 7 сумма триад
85 sda553
 
18.01.14
21:36
Надо чтобы в системе счисления основанной на этом простом числе возникала цикличность последнего знака, тогда и можно складывать куски размером с эту цикличность
для 7 - да, это триады
1-1
10-2
100-4
1000-1
10000-2
86 wertyu
 
18.01.14
21:37
(85) а для 11 вообще 10 коэффициентов
87 wertyu
 
18.01.14
21:37
+(86) ну т.е. максимально возможное
88 sda553
 
18.01.14
21:38
а цикличность возникает всегда, хотя бы потому, что число возможных цифр в последнем знаке конечна
89 sda553
 
18.01.14
21:39
таким образом двоичная система самая удобная для проверки на делимость
90 wertyu
 
18.01.14
21:41
(88) конечно всегда, она ограничена Число - 1
91 wertyu
 
18.01.14
21:42
+(90)* Делитель - 1
92 User_Agronom
 
18.01.14
21:46
(42) Это же элементарно. Тип string. Состоит только из цифр. Последняя цифра ноль.
Проверку на цифры, проверку последнего символа.
93 wertyu
 
18.01.14
21:52
(92) ты о чём?
94 User_Agronom
 
18.01.14
21:58
(92) pardon. Не внимательно подумал.
(85) 2 в степени n  никогда не будет иметь последней цифрой 0. Поэтому этот метод негоден.
95 mikeA
 
18.01.14
22:00
( ((n) & 1) == 0 && ((n) * 0xcccccccd) <= 0x33333333 )
96 mikeA
 
18.01.14
22:01
(95)+ для 32 бит
97 sda553
 
18.01.14
22:01
(95) что это за условие, выполнимо только при n=0
Такая извращенная проверка на 0?
98 User_Agronom
 
18.01.14
22:02
Чтобы число делилось на 10 без остатка необходимо и достаточно чтобы оно делилось без остатка на 2 и делилось без остатка на 5.
Проверить деление на 2 легко.
Вся проблема в том, чтобы проверить деление на 5. Трудность состоит в том, что 2^n никогда не будет равна 5^m
99 sda553
 
18.01.14
22:03
(98) Пока ты думал, мы уже на любое простое число делимость проверять научились
100 Neg
 
18.01.14
22:04
100 делится
101 wertyu
 
18.01.14
22:04
(99) это не мы, а Паскаль, Гаусс и Эйлер ) Гаусс вообще первообразные корни забабахал )
102 sda553
 
18.01.14
22:08
(101) лично я, независимо от них это сделао сегодня
103 mikeA
 
18.01.14
22:09
(97) & это побитовое И, && - логическое
первая проверка делимости на 2, вторая - на 5
104 User_Agronom
 
18.01.14
22:10
(99) Где? Покажи как проверить делимость на 5. Я не нашел в ветке.
105 wertyu
 
18.01.14
22:12
(104) в (77) уже в коде одноэса
106 User_Agronom
 
18.01.14
22:16
(105) Там же простое преобразование в число. Это слишком просто и неинтересно ))
107 sda553
 
18.01.14
22:16
(104) Разбивать строку на куски по 4 бита и эти цифры сложить, если делится на 5 то все число делится на пять.

Пример
1000110110000100
разбиваем на
1000+1101+1000+0100

считаем
8+13+8+4=33 на 5 не делится, значит все число на 5 не делится
108 User_Agronom
 
18.01.14
22:17
(103) Мне интересно, как Вы собрались реализовывать побитовое сравнение с символами строки.
109 wertyu
 
18.01.14
22:17
(106) нет
110 sda553
 
18.01.14
22:18
(108) мапингом (по 1совски-соответствием)
111 sda553
 
18.01.14
22:20
(106) там не преобразование в число
112 User_Agronom
 
18.01.14
22:22
(107) Это оптимизация (77) Блоки по четыре позволяют преобразовывать в шестнадцатиричную систему, блоки по три в восьмиричную и т.д.
Вижу отличие. И что, это работает?
113 wertyu
 
18.01.14
22:23
(106) исходный признак делимости на 5 в (13) он там неверно назван признаком делимости на 10
114 sda553
 
18.01.14
22:23
(112) ага
115 sda553
 
18.01.14
22:24
причем для любого простого числа, только куски разной длины. Например для проверки на 7 надо разбивать на куски по три бита
116 wertyu
 
18.01.14
22:26
(115) да нет, не так
смотри например для 11 надо не только на блоки по 10 бит разбивать, но и ещё и коэффициенты будут в таком порядке:
6 3 7 9 10 5 8 4 2 1
117 wertyu
 
18.01.14
22:28
т.е. это остатки от деления степеней 2 на 11
2^9,...,2^0
118 wertyu
 
18.01.14
22:29
но фактически можно просто эти остатки в цикле складывать
119 wertyu
 
18.01.14
22:35
+(118) конечно, если коэффициент на знакоместе единицы
120 sda553
 
18.01.14
22:40
(119) не надо там никаких остатков. Число простое и коэффициенты не кратны, умножение на них на делимость не влияет
121 wertyu
 
18.01.14
22:43
(120) коэффициенты это и есть остатки, а случай 5 просто исключительный, когда коэффициенты (остатки) это степени двойки, кроме 3, но его опять же по равенству остатка можно заменить на 8
122 wertyu
 
18.01.14
22:48
+(121) а с 11 будет именно 10 коэффициентов, потому как 2 является первообразным корнем 11
123 wertyu
 
18.01.14
23:30
(120) прикольно в (95) пофиг на всю последовательность, можно просто последний бит проверять, потом брать младшие 4 байта умножать на cccccccdh, брать от произведения младший байт и сравнивать его с 33333333h
124 ЧеловекДуши
 
19.01.14
10:07
(8) А в ПК все в двоичной форме. :)
125 ЧеловекДуши
 
19.01.14
10:08
Кто что пишет... Вы хоть у автора спросили, на каком языке программирования нужно это выразить :)
126 Salimbek
 
19.01.14
10:52
(107) Задумался, почему твой вариант работает... оказалось все просто, коэффициенты, которые мы рассчитали для битов, при проверке делимости на 5 (1,2,4,3):
10111001
34213421
------
30213001=10
80218001=20
В твоем же раскладе получается, что используются коэффициенты: 1,2,4,8=(3+5). Таким образом при добавлении 5 делимость на 5 не нарушается. И только по этому срабатывает.
(125) Придуманный алгоритм можно выразить на любом языке.
127 wertyu
 
19.01.14
11:41
(126) надо было (47) прочитать )
128 sda553
 
19.01.14
12:55
(125) Да хоть на брейнфаке, мне это без разницы. Главное алгоритм
129 Как страшно жить
 
19.01.14
13:04
(128) алгоритм описан тут
wiki:Признак_Паскаля
130 sda553
 
19.01.14
13:59
(122)
Берем деление на 11 и разберем по признаку Паскаля
r1=2 mod 11 =2
r2= 4 mod 11 =4
r3= 8 mod 11 = 8
r4 = 16 mod 11 =5
r5 = 10 mod 11 = 10
r6 = 20 mod 11 = 9
r7= 18 mod 11 = 7
r8= 14 mod 11 = 3
r9= 6 mod 11 = 6
r10 = 12 mod 11 = 1 = r0

Следовательно для двоичного числа
А вида. ...а10 а9 а8 а7 а6 а5 а4 а3 а2 а1 а0

мы получаем что его делимость, это делимость на 11 числа
а0+a1*2+а2*4+...+a7*7+a8*3+a9*6+{a10+a11*2...}
но обратим внимание, что
а7*7 mod 11 = а7*(7+11*11) mod 11=а7*128 mod 11
и аналогично
а8*3 mod 11 = a8*(3+11*23) mod 11 = a8*256 mod 11

А это значит, что можно проверять на делимость на 11 такое выражение
a0+a1*2+a2*4+...+a7*128+a8*256+a9*512+{a10+a11*2...}

Отсюда видно, что мы можем просто брать куски по 10 битов, складывать их Без всяких коэффициентов. И не усложнять программу.
131 zva
 
19.01.14
14:12
132 sda553
 
19.01.14
14:23
(131) фигня
Делимость на 5 это суммы блоков по 4 бита делятся на 5
Делимость на 7 это суммы блоков по 3 бита делятся на 7
Делимость на 9 это суммы блоков по 6 бит делятся на 9
133 wertyu
 
21.01.14
12:35
(130) а, так уже просто посчитал, тогда согласен без вопросов
134 Рэйв
 
21.01.14
12:38
Если МоеЧисло%10=0 Тогда
    Сообщить("Да");
Иначе
    Сообщить("Нет");
КонецЕсли;
//-----------------

Уже предлагали:
135 Рэйв
 
21.01.14
12:38
?
136 sda553
 
21.01.14
12:41
(135) ага, выдает неправильный результат в случае если
МоеЧисло = "1000001101001011011110101101010"
137 wertyu
 
21.01.14
12:42
(130) теперь я понял, про что ты говорил, признаки делимости на число m (простое) в двоичной системе - это просто сложение n-битных конструкций, где 0<m<n-1
138 Рэйв
 
21.01.14
12:42
(136)Так разговор про двоичные числа?
139 wertyu
 
21.01.14
12:42
(138) да
140 wertyu
 
21.01.14
12:43
+(137) тьфу, где 0<n<m-1
141 wertyu
 
21.01.14
12:44
да блин 0<n<m
142 Рэйв
 
21.01.14
12:45
Если Прав(Строка(ДвоичноеЧисло),4)="1010" Тогда
   Сообщить("Делится");
Иначе
   Сообщить("Не делится");
КонецЕсли;


Так пойдет?:-)
143 sda553
 
21.01.14
12:45
(137) ну наконец то.
Потому я и заметил, что двоичная система очень удобна в плане проверки на делимость. Т.к. для каждого простого числа найдется блок какой то длины, на который можно разбить и поскладывать.

Для непростых то же самое, кстати, только блоки не с младшего бита могут начинаться и к ним придется по определенному закону еще хвост приделать
144 wertyu
 
21.01.14
12:46
потому как остаток любого разряда k можно будет дополнить до 2^k, т.к. это остаток от 2^k mod m
145 sda553
 
21.01.14
12:46
(142) Ну конечно же нет, выдает неправильный результат при 11010 (число 26)
146 wertyu
 
21.01.14
12:47
(143) кроме m вида 2^n
147 Рэйв
 
21.01.14
12:47
(146)А оно не делится чтобы без остатка
148 Рэйв
 
21.01.14
12:48
ааа...понял
149 wertyu
 
21.01.14
12:49
(148) признак делимости на число m в двоичной системе - это просто сложение n-битных конструкций, где 0<n<m, кроме m вида 2^k
150 wertyu
 
21.01.14
12:50
все числа конечно натуральные и больше 1
151 sda553
 
21.01.14
12:53
(149) Не всегда, иногда зацикливание в признаке может произойти с какого то момента на ноль. и Дальше всегда тогда будет ноль. Тогда достаточно проверить хвост в котором еще был не ноль. Это охватывает числа 2^k
152 wertyu
 
21.01.14
12:55
(151) но можно точно сказать, что конструкция будет m-1 - битная для m, у которых 2 первообразный корень
153 wertyu
 
21.01.14
12:59
вообще этот признак будет справедлив для любой системы счисления, просто для достаточно малых чисел не будет иметь смысла