![]() |
Модераторы: 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:
Товарисчи, а как написать эту прогу без использования массивов??? Кстати, условия в первом посте. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |