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

Найти все простые натуральные числа, не превосходящие n, двоичная запись которых представляет собой палиндром - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ fatal error LNK1169: обнаружен многократно определенный символ - один или более http://www.cyberforum.ru/cpp-beginners/thread513515.html
код который показан снизу я компилировал в двух программах на visual c++ и dev c++ в dev c++ всё прошло успешно но в visual c++ выдаёт ошибку "fatal error LNK1169: обнаружен многократно определенный символ - один или более".. как решить это ? #include <iostream> using namespace std; int main() { int c=7; int& d = c; cout <<c; system("pause");
C++ Ссылка и Разыменование в с++ прошу кто можеть дать видеоурок(или что угодно) на эту тему.я очень затрудняюсь понят это.нужно много примеров из самого примитива до самого сложного http://www.cyberforum.ru/cpp-beginners/thread513481.html
C++ Матрица.
Люди добрые помогите написать программу. Введите прямоугольную матрицу и найдите транспонированную матрицу.
удаление из файла строки, используя временный файл C++
Помогите разобраться. Прилагаю исходник только функций, т.к. проблема в них по ходу. #include <iostream> #include <fstream> #include "in.h" using namespace std; Del :: Del(char *s) { len = strlen(s); str = new char; strcpy(str, s);
C++ Массивы http://www.cyberforum.ru/cpp-beginners/thread513464.html
Введите числовую прямоугольную матрицу и найдите номер линии, в которой находится максимальный элемент!
C++ Определить длину массива Собственно терроризировал вчера весь гугль, ничего кроме такого метода нахождения длины не нашел sizeof(massiv)/sizeof(massiv_typ) но данная конструкция как-то коряво работает, если массив передавать в функцию, и в гугле нашел, что так работать не будет с массивами которые передаются как параметры функциям кто знаком с паскалем, там есть функция узнать длину массива обычных стандартных типов... подробнее

Показать сообщение отдельно
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.03.2012, 10:05     Найти все простые натуральные числа, не превосходящие n, двоичная запись которых представляет собой палиндром
Более оптимальный перебор:
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
#include <iostream>
#include <vector>
#include <cstdio>
 
bool is_poly( unsigned x )
{
    static char bits[32];
    int i = 0;
    
    for ( ; x != 0; x >>= 1)
            bits[i++] = x & 1;
    
    for (int j = 0; j < (i >> 1); ++j)
        if ( bits[j] != bits[i - j - 1] )
            return false;
            
    return true;;
}
 
int main()
{   
    int n;
    
    if ( !(std::cin >> n) )
    {
        std::cerr << "Incorrect input!" << std::endl;
        return 1;
    }
    
    std::vector< bool > sieve( (n >> 1) + 1);
    
    for (int i = 3; i * i <= n; i += 2)
    {
        if ( !sieve[i >> 1] )
        {
            for (int j = (i << 1); j <= n; j += i)
                if ( j & 1 )
                    sieve[j >> 1] = 1;
        }
    }
    
    for (int i = 3; i <= n; i += 2)
    {
        if ( !sieve[i >> 1] && is_poly(i) )
        {
            std::cout << i << ' ';
        }
    }
}
Для n = 10^8 у меня чуть больше секунды работает. Кушает n / 16 байт памяти.
 
Текущее время: 19:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru