![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
kostyantmb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
Никак не удаётся написать следующюю программу: Дано натуральное число n, выяснить можно ли его представить в виде суммы 4-х простых чисел и вывести все возможные варианты. Буду благодарен, если чем-то поможите.
|
|||
|
||||
cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Самое большое число какое может быть?
Если известно максимальное значение n, то самое простое это сделать массив простых чисел в интервале 0 < X < n-1 где X простое число методом описаным здесь: http://www.ipkro.isu.ru/informat/olimps/95...od/solut2_2.htm и реализованным на VB здесь: http://forum.vingrad.ru/index.php?showtopic=30076 и перебрать всевозможные варианты. -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
kostyantmb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
Спасибо, может ещё кто-нибудь чего-нибудь подкинет стоющего?
А про n ничего не сказано. Это сообщение отредактировал(а) kostyantmb - 1.12.2004, 10:08 |
|||
|
||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: нет Всего: 24 |
Если n неизвестно, тогда находить все простые числа от 2-ух до n пользуясь решетом эратосфена : http://alglib.manual.ru/numbers/erat.php
А вообще это надо было постить в алгоритмы -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 2 Всего: 39 |
Попробуй
|
|||
|
||||
cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
красиво сказал ![]() 3,14, а ты смотрел те ссылки, которые я дал? Alexandr87, а твой вариант чем лучше "решета эратосфена"?
kostyantmb, я тебе не самый плохой вариант решения проблемы подкинул. Немного подумать осталось и возможно получится что-нибудь... О кстати идея ![]() У тебя число есть, которое нужну из суммы 4 простых чисел слепить. Ну так бери его за n (максимальное простое число) и дело сделано... Можно и еще кое что сделать, но это головная боль, но зато с большими n быстрее работать будет. Если хочешь напишу мыслю... Добавлено @ 18:37 3,14, кстати алгоритмы по той ссылке, что ты дал ИМХО через одно место сделаны на всех там указанных языках... Я был в шоке ![]() Помоему те, кто их писал вообще слова "оптимизация" не знают... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 2 Всего: 39 |
cardinal
А кто говорит, что он лучше, мне так удобнее. Кстати сорри, ятам немного недочитал. Я сделал из трех простых чисел, но там немного изменить надо. Но там сложностей не будет нужно еще один цикл for добавить |
|||
|
||||
kostyantmb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
Там ведь для 4 чисел, где цикл добавить?
и что такое #include <iostream>, может так: #include <iostream.h>??? |
|||
|
||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 2 Всего: 39 |
#include <iostream> - новый стандарт |
|||
|
||||
kostyantmb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
У меня Borland C++ его не понимает, как быть в таком случае, может просто использовать stdio.h ? Да, и если можешь выложи, пожалуйста, полный исходник программы, заранее благодарен.
Это сообщение отредактировал(а) kostyantmb - 3.12.2004, 18:29 |
|||
|
||||
kostyantmb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
Прогнал твой исходник, что получил:
1. Ввел число 21. 2. Получил на экране: ->21 2 3 5 7 11 13 17 19 ------------------------------------------------------------ 2 2 17 2 2 17 3 5 13 3 5 13 3 5 13 3 7 11 3 7 11 3 7 11 3 7 11 5 5 11 5 5 11 5 5 11 5 5 11 7 7 7 7 7 7 7 7 7 7 7 7 ------------------------------------------------------------- vsego - 18 // надо с помощью суммы четырёх чисел. // да, и ещё вопрос, можно ли решить поставленную задачу без использования массивов. Добавлено @ 20:04 Вот исходник, который я прогонял: #include <iostream.h> int in=0; //Переменная для ввода int* mas; //Массив для записи простых чисел int temp=0; //"Текущий" элемент вышеописанного массива void simple()//Функция записи всех простых чисел меньше in в массив mas { for (int x=2; x<in; x++) { int prov; prov=0; for (int y=2; y<x; y++) if (x%y==0) prov=1; if (prov==0) { mas[temp]=x; temp++; } } } // void out()//Функция вывода на экран содержимого массива { for (int x=0; x<temp; x++) cout<<mas[x]<<endl; } // void main() { int kol=0; cout<<"int\n->"; cin>>in; mas=new int[in]; simple(); out(); cout<<"_____________________\n"; for (int x=0; x<temp-3; x++) for (int y=x; y<temp-2; y++) for (int z=y; z<temp-1; z++) for (int c=z; c<temp; c++) if ((mas[x]+mas[y]+mas[z])==in) { kol++; cout<<mas[x]<<"\t"<<mas[y]<<"\t"<<mas[z]<<endl; } cout<<"_____________________\n"; cout<<"Vsego - "<<kol; delete [] mas; cin.get(); cin.get(); } |
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
kostyantmb, читай внимательнее, что тебе пишут!
if ((mas[x]+mas[y]+mas[z])==in) -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Нда? А ты думаешь они такой сложный код всместо просто двойного цикла по дурости написали? -------------------- Волны гасят ветер... |
|||
|
||||
cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
По чисто математическому подходу, а не по подходу с точки зрения эффективного программирования. Это мое предположение. То, что реализовано на VB это то, что придумали Греки и придумали не по дурости ![]() Fantasist, а ты думаешь тот двойной цикл работает медленнее в данном случае, чем вот эта страшилка?
Может конечно Fantasist ты и прав, но чтобы поверить в это надо сделать проверку profiler'ом или вникнуться сильно в алгоритм (что возможно ничего не даст, потому, что теория может оказаться далеко от практики), чего я не делал... Но даже если по алгоритму получается, что в среднем проходов будет меньше, то это еще ничего не значит. Заключение я (см. выше) сделал исходя из того, что если встречаются каждые столько-то шагов sqrt, деление, умножение и т.д., то вся польза от умного алгоритма пропадает и соответственно простой двойной цикл будет работать быстрее. Спорить тут нечего. Подход довольно простой. Берется один вариант и второй и проверяется profiler'ом... Если я не прав, то ... то я не прав ![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
kostyantmb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
2 ALL:
Товарисчи, а как написать эту прогу без использования массивов??? Кстати, условия в первом посте. |
|||
|
||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 2 Всего: 39 |
kostyantmb
А собственно зачем писать её без массивов, можно конечно организовать список, с использованием динамической памяти, но массив ведь вернее. Да и обращаться к списку массивов.... вощем мутарно. А так надо будет подумать мож можно и по другой технологии. |
|||
|
||||
kostyantmb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
Нет, просто в условии ещё говорилось не использовать при решении массивы.
|
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Ну тогда замени все обращения к массиву на функцию, которая тебе каждый раз будет высчитывать n-ое простое число
![]() ![]() А вообще думаю, что от тебя хотят чего-то очень хитрого... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 2 Всего: 39 |
kostyantmb
Мазахисты, нафиг усложнять себе жизнь. Создай нечто своё (класс), наподобие массивов, аля списки. |
|||
|
||||
kostyantmb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
А как это сделать? |
|||
|
||||
Fantasist |
|
||||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
А что ты тут такого страшного нашел? Инструкций много? Простой двойной цикл будет порядка n*n. Правда его можно значительно оптимизировать до порядка n*2. В этом алгоритме, как я понимаю, порядок примерно такой же.
Именно. Зачем говорить что это дрянь, если ты даже точно не представляешь как оно работает. Тот алгоритм который ты на бэйсике привел хорош, но только если исключить перераспределение памяти внутри цикла. Одно это сводит всю эффиктивность на нет. Тысяча реаллокаций побъют по неэффективности любые вычисления. -------------------- Волны гасят ветер... |
||||
|
|||||
cardinal |
|
||||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Ну это ясно...
А это я написал:
Точно не представляю, но примерно представляю ![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||||
|
|||||||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Ну если ясно, то оптимизируй! Код-то в постинге от тебя. Можно воспользоваться алгоритмом на alglib, который точнее вычисляет количество необходимых элементов для хранения результата. -------------------- Волны гасят ветер... |
|||
|
||||
cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
От меня, но не мой (см. автор ответа)...
А вообще я об этом же думал пятнадцать минут назад. ![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
kostyantmb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
Тема закрыта. Всем спасибо.
Это сообщение отредактировал(а) kostyantmb - 9.12.2004, 09:26 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |