Форум программистов, компьютерный форум CyberForum.ru

Алгоритм "Решето Эратосфена" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задача с двусвязным списком http://www.cyberforum.ru/cpp-beginners/thread731663.html
Помогите сделать задание. Вставить второй список вместо i-ного элемента первого.
C++ Убрать лишние пробелы в строке из файла Строка считывается из текстового файла (тип fstream), имя которого запрашивается у пользователя. Строка состоит из нескольких слов, которые отделяются друг от друга пробелами (одним или несколькими). Требуется подсчитать число слов в строке и изменить ее так, чтобы слова разделялись одним пробелом. Имеется код, где число слов подсчитывается нормально. А вот со второй частью задания возникли... http://www.cyberforum.ru/cpp-beginners/thread731659.html
Как в vector поместить double, bool? C++
#include <stdio.h> #include <vector> using namespace std; void main() { vector<int> vec; double t = -12.34; bool b = false; vec.push_back(t);//как сюда поместить t? vec.push_back(b);//как сюда поместить b?
Прямое преобразование указателя на D C++
int j = ( ( D* ) p )p -> y;// Прямое преобразование указателя на D помогите исправить ошибку...и напомните как называется данная работа с указателями ..
C++ Дано число а (1<а<=1.5) http://www.cyberforum.ru/cpp-beginners/thread731645.html
Дано число а (1<а<=1.5). Из чисел 1+1/2, 1+1/3, ... напечатать те, которые не меньша а
C++ Проблемка с функцией Ранд #include <iostream> #include <stdlib.h> #include <time.h> using namespace std; int main() { srand(TIME(0)); setlocale(LC_ALL,"Russian"); подробнее

Показать сообщение отдельно
CyberGenius
1 / 1 / 0
Регистрация: 23.08.2012
Сообщений: 100

Алгоритм "Решето Эратосфена" - C++

14.12.2012, 17:34. Просмотров 1173. Ответов 2
Метки (Все метки)

Вот наконец-то получилось реализовать это алгоритм. Укажите, пожалуйста, как можно написать красивее и рациональней?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
vector<int> all;//Здесь храняться все числа от 0 до n
    int n= 0; //верхний предел
    int p = 2; //первое простое число
    cin>>n;
 
    for(int i = 0; i<=n; ++i){//Заполнение вектора all
        all.push_back(i);
    }
 
    while(p*p<n){
 
        for(int i = p; i<=n - p; i +=p ){//Заполнение нулями чисел кратных p
            all[i + p] = 0;//Чтобы не заполнять число равное all[i]
        }
    
        int k = p;//НУжно сохранить значение р, т.к дальше в цикле оно изменяется, а нужно использовать имено это значение
 
        for(int i = n; i>=k+1; --i){//Проходим весь вектор и если all[i] не равно 0, то присваеваем р его значение.
            //К+1 используем для того, чтобы не записать в р уже использованое значение
            //т.е чтобы алгоритм опять не просчитывался при р=2; 
 
            if(all[i]!=0){
                p =all[i];
            }
        }
    }
 
    for(int i = 2; i<=n; ++i){//Опять проходим весь вектор и выводим все all[i] не равные 0
        if(all[i]!=0){
            cout<<all[i]<<endl;
        }
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru