Совершенные числа

1. scientes 289 28.11.22 18:26 Сейчас в теме
Нарисовал запрос , который ищет первые 4 совершенных числа . Совершенными называются числа, которые равны сумме своих делителей, кроме самого числа. 6 это первое совершенное число, так как 6=1+2+3. Какие еще есть варианты для 1С ? Задача на разработку алгоритма для поиска совершенных чисел мне попадалась на infostart, как пример тестового задания.
Текст="ВЫБРАТЬ
	       |	0 КАК Разряд
	       |ПОМЕСТИТЬ мОснование
	       |
	       |ОБЪЕДИНИТЬ ВСЕ
	       |
	       |ВЫБРАТЬ
	       |	1
	       |
	       |ОБЪЕДИНИТЬ ВСЕ
	       |
	       |ВЫБРАТЬ
	       |	2
	       |
	       |ОБЪЕДИНИТЬ ВСЕ
	       |
	       |ВЫБРАТЬ
	       |	3
	       |
	       |ОБЪЕДИНИТЬ ВСЕ
	       |
	       |ВЫБРАТЬ
	       |	4
	       |
	       |ОБЪЕДИНИТЬ ВСЕ
	       |
	       |ВЫБРАТЬ
	       |	5
	       |
	       |ОБЪЕДИНИТЬ ВСЕ
	       |
	       |ВЫБРАТЬ
	       |	6
	       |
	       |ОБЪЕДИНИТЬ ВСЕ
	       |
	       |ВЫБРАТЬ
	       |	7
	       |;
	       |
	       |////////////////////////////////////////////////////////////­////////////////////
	       |ВЫБРАТЬ
	       |	мОснование0.Разряд + 8 * (мОснование1.Разряд + 8 * (мОснование2.Разряд + 8 * мОснование3.Разряд)) КАК Ч
	       |ПОМЕСТИТЬ мЧисла
	       |ИЗ
	       |	мОснование КАК мОснование0,
	       |	мОснование КАК мОснование1,
	       |	мОснование КАК мОснование2,
	       |	мОснование КАК мОснование3
	       |;
	       |
	       |////////////////////////////////////////////////////////////­////////////////////
	       |ВЫБРАТЬ
	       |	А.Ч КАК Лев,
	       |	Б.Ч КАК Прав,
	       |	А.Ч * Б.Ч КАК П
	       |ПОМЕСТИТЬ мПроизведения
	       |ИЗ
	       |	мЧисла КАК А,
	       |	мЧисла КАК Б
	       |ГДЕ
	       |	А.Ч <= Б.Ч
	       |	И А.Ч > 1
	       |;
	       |
	       |////////////////////////////////////////////////////////////­////////////////////
	       |ВЫБРАТЬ
	       |	мПроизведения.П КАК П,
	       |	СУММА(ВЫБОР
	       |			КОГДА мПроизведения.Лев = мПроизведения.Прав
	       |				ТОГДА мПроизведения.Лев
	       |			ИНАЧЕ мПроизведения.Лев + мПроизведения.Прав
	       |		КОНЕЦ) КАК СуммаМножителей
	       |ИЗ
	       |	мПроизведения КАК мПроизведения
	       |
	       |СГРУППИРОВАТЬ ПО
	       |	мПроизведения.П
	       |
	       |ИМЕЮЩИЕ
	       |	СУММА(мПроизведения.Лев + мПроизведения.Прав) + 1 = мПроизведения.П";


Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1826630 28.11.22 19:58 Сейчас в теме
Жениться вам надо, барин!
kuzev; Anchoret; user856012; uk09; user1863362; EvgeniyOlxovskiy; +6 Ответить
3. EvgeniyOlxovskiy 52 29.11.22 07:20 Сейчас в теме
Каждое технологическое решение имеет границы применимости. 1С это не язык общего назначения, он не живет отдельно от своего фреймворка. 1С целесообразно применять когда вам нужно:

серверное приложение
приложение, где фигурируют финансы
с готовым UI, ORM, Reporting, XML/JSON/COM/PDF/YourDataTransferingFormat
с поддержкой фоновых процессов и заданий
с системой безопасности на основе ролей
со скриптуемой бизнес-логикой
с возможностью быстрого создания прототипа и низким time-to-market


1С вам не нужно, если вы хотите:

машинное обучение
расчеты на GPU
компьютерная графика
математические расчеты
CAD-систему
обработка сигналов (звук, видео)
highload http-вызовы с сотнями тысяч rps
Показать
- цитата Андрея Овсянкина
4. Andrei26rus 06.12.22 18:18 Сейчас в теме
Найдена формула для быстрого нахождения совершенных чисел последовательно, найду даже то, которое сейчас не известно
5. Andrei26rus 06.12.22 18:26 Сейчас в теме
2 часа и решение найдено
7. scientes 289 07.12.22 08:53 Сейчас в теме
(5) Самое интересное - это нечетное совершенное число. Пока оно не найдено и не доказано, что таких чисел нет.
6. пользователь 06.12.22 19:13
Сообщение было скрыто модератором.
...
8. user1278383 4 07.12.22 14:55 Сейчас в теме
а если воспользоваться свойством, что совершенное число равно pow(2, p) * (pow(2, p) - 1), то задача окажется еще проще) Тупо перебор у меня занял минуту, запрос тс 20 секунд, используя свойство выше менее секунды)
9. user1278383 4 07.12.22 15:00 Сейчас в теме
(8) 7 чисел выводит за две секунды, перебор уже уйдет в бесконечность наверно, как и запрос с полным соединением.
10. user1863362 07.12.22 15:03 Сейчас в теме
(8)
совершенное число равно pow(2, p) * (pow(2, p) - 1), то задача окажется еще проще) Тупо перебор у меня занял минуту, зап

А что такое p в этой формуле?
11. user1278383 4 07.12.22 15:04 Сейчас в теме
(10) степень от 1 до бесконечности. Я ставил до 20
13. user1278383 4 07.12.22 15:06 Сейчас в теме
(11) забыл упомянуть, что pow(2, й) - 1 - простое число
17. user1863362 07.12.22 15:09 Сейчас в теме
(13) Так так. И как ты проверяешь число на проcтоту?
16. user1863362 07.12.22 15:08 Сейчас в теме
(11) А вот дядька Евклид, говорит, что p там не обычное, а такое, что pow(2, p) - 1 простое число. Врет небось?
12. scientes 289 07.12.22 15:06 Сейчас в теме
(8) Можете привести свой запрос ?
14. user1278383 4 07.12.22 15:06 Сейчас в теме
15. user1278383 4 07.12.22 15:08 Сейчас в теме
(14)
&НаСервере
Процедура Команда1НаСервере() 
	Начало = ТекущаяДата();  
	Количество = 0;
	
	Для й = 2 ПО 30 Цикл
		мн = pow(2, й) - 1;
		Если ПростоеЧисло(мн) Тогда 
			рез = ((мн + 1) / 2) * мн; 
			Сообщить(рез);
			Количество = Количество + 1;
		КонецЕсли;
		Если Количество = 10 Тогда
			Прервать;
		КонецЕсли;		
	КонецЦикла; 
	Конец = ТекущаяДата();
	Сообщить(Конец-Начало);
КонецПроцедуры

Функция ПростоеЧисло(Число)

	Для й = 2 ПО Цел(Число/2) Цикл
		Если Число % й = 0 Тогда
			Возврат Ложь;
		КонецЕсли;
	КонецЦикла;
	Возврат Истина
	
КонецФункции
Показать
20. scientes 289 07.12.22 15:13 Сейчас в теме
(15) В функции ПростоеЧисло достаточно проверять до целой части корня квадратного из исходного числа.
22. user1278383 4 07.12.22 15:15 Сейчас в теме
(20) можно сразу исключить четные й, думаю еще можно что-то придумать)
18. user1278383 4 07.12.22 15:11 Сейчас в теме
(17) разве это неочевидно? Мой код самый простой, его можно оптимизировать
19. scientes 289 07.12.22 15:11 Сейчас в теме
Самое сложное- то проверка на простоту числа (2^p)-1. Если верить википедии самое большое из известных сейчас значений p - 82 589 933.
21. user1278383 4 07.12.22 15:14 Сейчас в теме
(19) но это все равно быстрее, чем обычный перебор. К тому же таких чисел будет немного (зависит от параметра p). Для 7 чисел достаточно было ограничиться 20. 20 проверок на простоту - это немного
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот