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

1. scientes 283 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; rovodap; user751607; +6 Ответить
3. user751607 3 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 283 07.12.22 08:53 Сейчас в теме
(5) Самое интересное - это нечетное совершенное число. Пока оно не найдено и не доказано, что таких чисел нет.
6. пользователь 06.12.22 19:13
Сообщение было скрыто модератором.
...
8. user1278383 3 07.12.22 14:55 Сейчас в теме
а если воспользоваться свойством, что совершенное число равно pow(2, p) * (pow(2, p) - 1), то задача окажется еще проще) Тупо перебор у меня занял минуту, запрос тс 20 секунд, используя свойство выше менее секунды)
9. user1278383 3 07.12.22 15:00 Сейчас в теме
(8) 7 чисел выводит за две секунды, перебор уже уйдет в бесконечность наверно, как и запрос с полным соединением.
10. rovodap 07.12.22 15:03 Сейчас в теме
(8)
совершенное число равно pow(2, p) * (pow(2, p) - 1), то задача окажется еще проще) Тупо перебор у меня занял минуту, зап

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

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

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

Программист 1С
Москва
зарплата от 200 000 руб.
Полный день

Аналитик
Москва
зарплата от 150 000 руб. до 300 000 руб.
Полный день

Системный архитектор
Москва
зарплата от 150 000 руб.
Полный день

Ведущий консультант аналитик 1С ERP, УХ
Ульяновск
зарплата от 120 000 руб.
Полный день