Имя: Пароль:
1C
1С v8
Простые числа, структура
0 Hennessy
 
22.01.14
16:07
Помогите решить задачу.
В модуле управляемого приложения создайте структуру «Числа». Ключом
структуры является слово «Число» и числовое значение (например, «Число392»), а значением
соответствующий одно из слов – "Простое", "Не простое".
Заполните структуру для диапазона чисел от 1 до 1000. Напомню, что простым числом является то, которое нацело делится на само себя и на 1.

Я создал структуру:

Процедура Структура() Экспорт
Стр = Новый Структура;        
    Счетчик=0;
    Пока Счетчик<1000 Цикл
        Счетчик=Счетчик+1;    
        Стр.Вставить("Число"+формат(Счетчик,"ЧГ="));    
    КонецЦикла;
КонецПроцедуры

Теперь мне надо создать значения! Но я не могу создать алгоритм простых чисел!
1 sda553
 
22.01.14
16:09
2 Irbis
 
22.01.14
16:10
ЕМНИП, нет ещё алгритма формирования простого числа.
3 Wobland
 
22.01.14
16:11
(0) задача ясна. какие мысли?
4 Господин ПЖ
 
22.01.14
16:12
бруталфорсно - сиди и дели на все предыдущие...
5 Defender aka LINN
 
22.01.14
16:12
(0) "От 1 до 1000" - это не совсем то же самое, что "От 1 до 999", как у тебя.
*вооружился попкорном*
6 H A D G E H O G s
 
22.01.14
16:12
7 Avganec
 
22.01.14
16:13
(2) в очень грубом виде есть что-то подобное есть, но там столько математики, что проще стандартными методами - мозг живее будет
8 Господин ПЖ
 
22.01.14
16:13
9 Господин ПЖ
 
22.01.14
16:14
(5) бугага
10 Йохохо
 
22.01.14
16:15
(5) это оптимизация
11 Wobland
 
22.01.14
16:15
(5) там будет ещё один проход после КонецЦикла
12 Господин ПЖ
 
22.01.14
16:15
(5) садись, два
13 Wobland
 
22.01.14
16:17
(12) ничо, что он инкрементацию делает в первой же строке цикла?
14 Laerys
 
22.01.14
16:18
(13) в любом случае не 1-999)
15 Irbis
 
22.01.14
16:18
(13) Все равно извращенец
16 Господин ПЖ
 
22.01.14
16:19
(13) люди, завязывайте с веществами...
17 sda553
 
22.01.14
16:20
Кто напишет код 1С решающий поставленную задачу - тот редиска
18 Господин ПЖ
 
22.01.14
16:20
уже цикл простейший в мозгу прокрутить не могут...
19 МойКодУныл
 
22.01.14
16:20
wiki:Список_простых_чисел
просто загрузи и не парься. Все лдавно расчитано.
20 Господин ПЖ
 
22.01.14
16:21
я предлагаю идти по пути (4)... если X%Y дает 0 - выпиливаем из простых

нам эти решеты не указ
21 sda553
 
22.01.14
16:22
(19) О точняк, напиши код загрузки с сайта wiki:Список_простых_чисел
потом парсер этой таблицы и заполняй
22 GANR
 
22.01.14
16:23
(0) Это же проще пареной репы http://ru.wikipedia.org/wiki/Решето_Эратосфена
23 sda553
 
22.01.14
16:24
(22) Отстань, мы не ищем простых путей
24 Laerys
 
22.01.14
16:25
ждем от автора тест агравала—каяла—саксены в реализации 1с на рекурсивных функциях
25 GANR
 
22.01.14
16:25
(23) Да уж, математиков среди программистов 1С - по пальцам одной руки пересчитать на всю Россию.
26 Irbis
 
22.01.14
16:26
(25) Зачем в 1С математики. Это язык для автоматизаци бреда клиентов.
27 Wobland
 
22.01.14
16:28
(24) про вещества уже говорили? ;)
28 sda553
 
22.01.14
16:29
(24) А может ТС и есть Агравал или Каял (а может даже и сам Саксена). Просто он 1С не знает
29 Asmody
 
22.01.14
16:33
30 МойКодУныл
 
22.01.14
16:35
(23) Тогда КОД:
Короче не напишите.

Для Сч=1 По 1000 Цикл
        Ответ = Вопрос(Строка(Сч) + " простое число?", РежимДиалогаВопрос.ДаНет);
        Стр["Число" + Строка(Сч)] = (Ответ = КодВозвратаДиалога.Да);                         
    КонецЦикла;
31 Wobland
 
22.01.14
16:38
(30) на тысяче поломаешься ;)
32 Asmody
 
22.01.14
16:39
да там простых чисел всего несколько десятков будет. захардкодить и дело с концом! и работать быстро будет
33 Йохохо
 
22.01.14
16:41
(30) 4+ "соответствующий одно из слов – "Простое", "Не простое"
34 МойКодУныл
 
22.01.14
16:41
(31) не было времени проверить, до 500 дошел, потом сдался:))),
хотя 1000 у него в структуре должна быть.
35 Жан Пердежон
 
22.01.14
16:42
зачем оболтусу помогаем тестовое задание написать?
пусть сам думает
36 zva
 
22.01.14
16:45
"Напомню, что простым числом является то, которое нацело делится на само себя и на 1."
По этому определению и 1 - простое число
37 Irbis
 
22.01.14
16:46
(36) Два должно быть делителя
38 zva
 
22.01.14
16:48
(37) в (0) другое определение
поэтому любое целое число нацело делится на себя и на 1, так что просто в цикле заполнить
39 Мэс33
 
22.01.14
16:50
интересно
потом код выложите?
40 Franchiser
 
гуру
22.01.14
16:51
А че в цикле нельзя сделать? например число 13.
ччч = 13;
Пока истина цикл
если ччч%(ччч-1)=0 и ччч>1 тогда
Этопростое= Истина;
иначе
Этопростое = ложь;
КонецЕсли;

конеццикла;
41 Franchiser
 
гуру
22.01.14
16:52
еще там прервать; в цикле надо
42 hhhh
 
22.01.14
16:54
(40) ччч%(ччч-1)=0 - ответ 2.
43 Infsams654
 
22.01.14
16:54
На 1С решил посчитать
http://otvet.mail.ru/question/14474644
44 Ненавижу 1С
 
гуру
22.01.14
16:56
лучше решите Можно ли подобрать рациональные числа? чем ерундой маяться
45 Franchiser
 
гуру
22.01.14
16:56
(42) в смысле?
46 Irbis
 
22.01.14
16:58
(44) А чем твоя ерунда лучше этой?
47 hhhh
 
22.01.14
16:58
(45) у вас получится только одно число простое - это 2. ВСе остальные сложные
48 Infsams654
 
22.01.14
16:59
(44) теорема Ферма не в зачет
49 Franchiser
 
гуру
22.01.14
17:00
(45) простые числа это 1, 3,5, 7, 13 и т д. сначала цикл по всем числам то есть ччч=1,2,3,4,5,6,7 а в цикле проверять внутри еще
50 Laerys
 
22.01.14
17:02
(44) Картинку ждем, после нее все должно стать очевидно)
51 GANR
 
22.01.14
17:04
(26) Я считаю, что без знания таких аппаратов, как графы, деревья и комбинаторика ни один более-менее серьезный и универсальный софт типа самой платформы 1С, эксель, проджект или еще что-то просто невозможен хоть на 1С, хоть на C#, хоть на ассемблере. Элементарно, к примеру, проверить нет ли зацикливания иерархии справочника или не зациклены ли виды расчета по зависимостям, или попробуйте проверить ссылочную целостность перед удалением помеченных. А? Многие такое осилят?
52 Franchiser
 
гуру
22.01.14
17:05
+(49) и 2 тоже наверное простое
53 Laerys
 
22.01.14
17:07
(52) Тогда уж и 11...
54 Ненавижу 1С
 
гуру
22.01.14
17:07
(49) 1 не простое число
55 hhhh
 
22.01.14
17:09
(3) ну берем ччч = 3 ТОгда

если ччч%(ччч-1)=0 и ччч>1  ложь, то есть число 3 у вас не простое.
56 Franchiser
 
гуру
22.01.14
17:12
(55)Давая с 1 до 9 брать не будем, там исключения всякие)))
57 Franchiser
 
гуру
22.01.14
17:14
Для сч=10 по 1000
ччч = сч;
запч= сч-1;
Пока истина цикл
если ччч%(запч)=0 и ччч>10 тогда
Этопростое= Истина;
прервать;
иначе
Этопростое = ложь;
КонецЕсли;
запч= ччч-1;

конеццикла;
конеццикла;
58 hhhh
 
22.01.14
17:15
(56) ну реально это фантастика, любые числа возьми, 13 разве может поделиться на 12? Или 100 на 99? Ни не бывает такого.
59 Franchiser
 
гуру
22.01.14
17:16
(58) а кто говорит о делении Оператор % считает остаток от деления 13%12 = 1 т.к. остаток от деления 1
60 Franchiser
 
гуру
22.01.14
17:18
13/12 = 1 1/12 так может понятнее
61 sda553
 
22.01.14
17:48
Стр = Новый Структура;        
    Счетчик=0;
    Пока Счетчик<1000 Цикл
        Счетчик=Счетчик+1;    
        Стр.Вставить("Число"+формат(Счетчик,"ЧГ="),"Простое");    
    КонецЦикла;
П=2;
Пока П<=500 Цикл
    Счетчик=П;
    Пока (Счетчик+П)<=1000 Цикл
        Счетчик = Счетчик+П;
        Стр["Число"+формат(Счетчик,"ЧГ=")]="Не простое";        
    КонецЦикла;
    П=П+1;
КонецЦикла;
Стр["Число1"]="Не простое";
62 Господин ПЖ
 
22.01.14
17:52
Если ТекущийПользователь.Пол = Перечисления.ПолФизЛиц.Мужской Тогда
ВсеЧтоМеньшеИРавноПростыеЧисла = 21;
Иначе
ВсеЧтоМеньшеИРавноПростыеЧисла = 20;
КонецЕсли;
63 Speshuric
 
22.01.14
17:53
(61) До 500 не надо 1000 проверять. Достаточно проверять 2,3,5,7,11,13,17,19,23,29,31. Потому что если x составное, то хоть один множитель меньше квадратного корня
64 Franchiser
 
гуру
22.01.14
17:55
еще вариант
для сч=1 по 1000 цикл
если сч=1 тогда
сообщить("простое");
иначеесли сч=2 тогда
сообщить("простое");
...
иначеесли сч=1000 тогда
сообщить("не простое");
конецесли;

конецикла;
65 Classic
 
22.01.14
18:19
Для Сч = 1 По 1000 Цикл
    Простое = Истина;
    Сч1 = 2;
    Пока Сч1*Сч1 <= Сч Цикл
        Если Сч%Сч1 = 0 Тогда
            Простое = Ложь;
            Прервать;
        КонецЕсли;
        Сч = Сч + 1;
    КонецЦикла;
    Структ.Вставить("Число" + Сч,?(Простое,"Простое","Непростое");
КонецЦикла;
66 Classic
 
22.01.14
18:19
С тебя сто баксов. Или 10% с каждого оплаченого заказа
67 Господин ПЖ
 
22.01.14
18:21
(66) где решето???
68 Classic
 
22.01.14
18:21
(67)
Зачем?
69 Classic
 
22.01.14
18:22
Решето потянет на 200
70 Classic
 
22.01.14
18:28
Структ = Новый Структура;
Для Сч = 1 По 1000 Цикл
    Структ.Вставить("Число" + Сч, "Простое");
КонецЦикла;


Р = 2;
ФлагВыхода = Ложь;
Пока НЕ ФлагВыхода Цикл
Сч = Р;
Пока Сч <= 1000 Цикл
   Стукт.Вставить("Число" + Сч, "Непростое");
   Сч = Сч + Р;
КонецЦикла;
Для Сч = Р+1 По Цикл
   Если Структ["Число" + Сч] = "Простое" Тогда
       Прервать;
   КонецЕсли;
   ФлагВыхода = Истина;
КонецЦикла;
Р = Сч;
КонецЦикла;
71 Classic
 
22.01.14
18:32
Сч = Р поменять на Сч = Р*Р
72 Hennessy
 
23.01.14
15:42
(70) Спасибо! очень помогло! осталось только доработать
73 Hennessy
 
27.01.14
07:57
P.S.: Никит, не суди строго! =)