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

Числа-близнецы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вопрос про чтение из файла http://www.cyberforum.ru/cpp-beginners/thread150930.html
Дали в колледже курсовую на тему создания ежедневного, почасового расписания(запись дел в определенное время) для 5 бригад. Задание сделал там же в аудитории, на что преподаватель усложнил, мол все эти таблицы с данными должны записываться в .тхт файл, и считываться оттуда же при входе в программу, либо при вводе определенного значения\пункта меню в консоли. Запись сделал, а вот со считыванием...
C++ Найти первые k Найти первые k членов последовательности, если последовательность образована по закону:A1=x , An=... http://www.cyberforum.ru/cpp-beginners/thread150927.html
Отформатировать текст по правому краю C++
Помогите с программой, не понимаю как это сделать: Разработать программу, которая разбивает заданный текст на две колонки и форматирует их по правому краю (без переноса). Ширина колонки задается произвольно. Желательно на С
C++ Детектировать ошибку
#include <iostream> #include <windows.h> #include <ddk\ntapi.h> #include <ddk\winddk.h> #include <ddk\ntddk.h> using namespace std; int main() {
C++ Слишком большие программы! http://www.cyberforum.ru/cpp-beginners/thread150914.html
Я начинаю писать консольные приложения на Dev C++. Компилирую. Я раньше не смотрел на размер, а сейчас увидел, что он больше 400 Кб!!! и это при таком коде: #include <iostream> int main(){} То есть 1 модуль для консолей весит почти как программа на Delphi на визуальном проектировании!!! :swoon: Подскажите как уменьшить размер программы. Или модуль другой использовать надо...
C++ Работа с файлами (С) Подскажите как работать с файлами в С. Чтение файла, запись в файл, вывод содержимого файла на экран. Желательно на примерах). Зарание спасибо. подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
02.07.2010, 17:11     Числа-близнецы
Задача 1:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
////////////////////////////////////////////////////////////////////////////////
//Дано натуральное число n. Выяснить, имеются ли среди чисел n, n+1, ..., 2n 
//близнецы, т.е. простые числа , разность между которыми равна двум. 
//(Определить процедуру, позволяющую распознавать простые числа).
////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <cmath>
 
typedef std::vector<long>  T_nums;
 
const long MIN_PROSTOE          = 2;
const long RAZNOST_MEJDU_BLIZN  = MIN_PROSTOE;
////////////////////////////////////////////////////////////////////////////////
long  get_first_bliznec
    (
        long  left,
        long  right
    )
{
    struct T_generate_s_pereryvom
    {
        long  cur_num_;
        long  baza_right_;
        long  blizn_left_;
        T_generate_s_pereryvom
            (
                long  start_num,
                long  baza_right,
                long  blizn_left
            ) : cur_num_    (start_num), 
                baza_right_ (baza_right), 
                blizn_left_ (blizn_left)
        {}
        long operator()()
        {
            if(cur_num_ == baza_right_ + 1)
            {
                cur_num_ = blizn_left_;
            }
            return  cur_num_++;
        }
    };
 
    const long RIGHT_BAZA_ROUND = static_cast<long>(sqrt(static_cast<double>(right)));
 
    T_nums  nums(right - left + 1 + RIGHT_BAZA_ROUND - MIN_PROSTOE + 1);
    std::generate(nums.begin(), nums.end(), 
                  T_generate_s_pereryvom(MIN_PROSTOE, RIGHT_BAZA_ROUND, left));    
 
    class T_bliznec_exception : public std::exception
    {
        long  bliznec_;
    public:
        T_bliznec_exception(long  bliznec) : bliznec_(bliznec)
        {}
 
        long get_bliznec() const
        {
            return  bliznec_;
        }
    };
 
    struct T_get_bliznec_from
    {
        T_nums  prostye_;
        long    left_bound_;
        T_get_bliznec_from(long  left_bound) : left_bound_(left_bound)
        {}
        void operator() (long  cur_num)
        {
            struct T_delitsya
            {
                long  delimoe_;
                T_delitsya(long  delimoe) : delimoe_(delimoe)
                {}
                bool operator() (long delitel)
                {
                    return delimoe_ % delitel == 0;
                }
            };
            if(prostye_.empty())
            {
                prostye_.push_back(cur_num);
            }
            else
            {
                if(std::find_if(prostye_.begin(), prostye_.end(), T_delitsya(cur_num)) 
                   == prostye_.end())
                {
                    if(cur_num - prostye_.back() == RAZNOST_MEJDU_BLIZN
                       && left_bound_ <= prostye_.back())
                    {
                        throw T_bliznec_exception(prostye_.back());
                    }
                    prostye_.push_back(cur_num);
                }
            }
        }
    };
    long  bliznec = 0;
    try
    {
        std::for_each(nums.begin(), nums.end(), T_get_bliznec_from(left));        
    }
    catch(const T_bliznec_exception& e)
    {
        bliznec = e.get_bliznec();
    }   
    return bliznec;
}
////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    long n;
    do
    {
        std::cout << "n = ";
        std::cin >> n;    
    }while(n < 1);
    long m = 2 * n;
    long bliznec = get_first_bliznec(n, m);
    std::cout << "На отрезке ["
              << n
              << ", "
              << m
              << "] ";
    if(bliznec)
    {
        std::cout << "имеются простые числа-близнецы. "
                  << std::endl
                  << "Первые из них: "
                  << bliznec
                  << ", "
                  << bliznec + RAZNOST_MEJDU_BLIZN
                  << "."
                  << std::endl;
    }
    else
    {
        std::cout << "нет простых чисел-близнецов."
                  << std::endl;
    }
    return 0;
}
 
Текущее время: 18:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru