Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема написал код ну прога не запускается 
:(
    Опции темы
albertn
Дата 22.8.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: нет
Всего: 34



Цитата(MAKCim @ 22.8.2006,  09:41)
Цитата

как мона вывести все цыфры с 1- 100 чтоб они были простыми!

Код

#include <iostream>

bool is_simple(unsigned long number)
{
    if (number>0 && number<4)
        return true;
    unsigned long i=2;
    for (; i<number &&
        number%i; ++i);
    return i==number;
}

template<class Stream> void find_sn(
        unsigned long left, 
        unsigned long right, 
        Stream& stream
    )
{
    while (left<=right)
    {
        if (is_simple(left)) 
            stream<<left<<std::endl;
        ++left;
    }
}

int main()
{
    find_sn(1,100,std::cout);
    return 0;
}

Криво, очень криво. Зачем просто так перебирать все делители, если вполне достаточно перебирать уже полученные простые числа, как в предыдущем примере?
PM WWW ICQ   Вверх
MAKCim
Дата 22.8.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Криво, очень криво. Зачем просто так перебирать все делители, если вполне достаточно перебирать уже полученные простые числа, как в предыдущем примере?

Не криво, а нерационально с точки зрения времени выполнения (предыдущий пример требует дополнительной памяти)
да я и не говорил, что мой вариант лучше


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
albertn
Дата 22.8.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: нет
Всего: 34



Цитата(MAKCim @ 22.8.2006,  11:10)
Не криво, а нерационально с точки зрения времени выполнения (предыдущий пример требует дополнительной памяти)
да я и не говорил, что мой вариант лучше

Редко когда простые числа нужны только для вывода на экран. А память сейчас это не главное, по крайней мере в данной программе. Сейчас главное это скорость и универсальность. А если ему надо будет расчитать до 1000 или 10000, то сколько же она тогда будет вычислять?
PM WWW ICQ   Вверх
MAKCim
Дата 22.8.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

А если ему надо будет расчитать до 1000 или 10000, то сколько же она тогда будет вычислять? 

меньше секунды на моем PIV
Цитата

 и универсальность.

Вот именно, если мне надо просто проверить, является ли число x>1000000 простым, мне что, надо последовательно находить все простые числа
и делить на них?
м вообще здесь алгоритмы не обсуждаются
человек просил
Цитата

программа должна выводить простые числа  тока не хочет работать

я написал, программа работает и является достаточно универсальной


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
albertn
Дата 22.8.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: нет
Всего: 34



Цитата(MAKCim @ 22.8.2006,  12:38)
я написал, программа работает и является достаточно универсальной

Я это все к тому, что зачем писать код, пусть даже он более простой, если уже разобран пример более универсальной программы?
PM WWW ICQ   Вверх
MAKCim
Дата 22.8.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Я это все к тому, что зачем писать код, пусть даже он более простой, если уже разобран пример более универсальной программы? 

все, не хочу дальше спорить, мир  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
ergocom
Дата 22.8.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 16.8.2006

Репутация: нет
Всего: нет



Мне надо простой а не с обьектои классом
до них я еще не дошел smile 
PM   Вверх
ergocom
Дата 24.8.2006, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 16.8.2006

Репутация: нет
Всего: нет



Народ вы правы мне нужны простые числа вот как мона очень легко их найти!  smile 
Код

#include <iostream> 
using namespace std; 

int main() {  
_wsetlocale(LC_ALL, L"Russian");
  int i, j; 
  bool prime; 

  for(i=1; i < 100; i++) { 
    prime = true;  

    
    for(j=2; j <= i/2; j++) 
     
      if((i%j) == 0) prime = false; 

    if(prime) 
      cout << i << "  Простые числа с 1-100\n"; 
  } 

  return 0; 
}


PM   Вверх
pablo
Дата 24.8.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: 4
Всего: 6



Это классический пример - "Решето Ератосфена"


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
albertn
Дата 24.8.2006, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: нет
Всего: 34



Цитата(ergocom @ 24.8.2006,  07:56)
Народ вы правы мне нужны простые числа вот как мона очень легко их найти!  smile 
Код

#include <iostream> 
using namespace std; 

int main() {  
_wsetlocale(LC_ALL, L"Russian");
  int i, j; 
  bool prime; 

  for(i=1; i < 100; i++) { 
    prime = true;  

    
    for(j=2; j <= i/2; j++) 
     
      if((i%j) == 0) prime = false; 

    if(prime) 
      cout << i << "  Простые числа с 1-100\n"; 
  } 

  return 0; 
}


Я только одного не понял, почему i/2 а не корень?
PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0785 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.