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

Дано четное число п > 2. Проверить для него гипотезу Гольдбаха - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Одинаковы ли символьные коды для всех систем/компиляторов? http://www.cyberforum.ru/cpp-beginners/thread20678.html
То есть будут ли операции типа: char c = 'A'; c += 1; cout << int(c); Всегда давать одинаковый результат?
C++ Создать класс Money для работы с денежными суммами Помогите решить:-[ Создать класс Money для работы с денежными суммами. Число должно быть представлено двумя полями: типа long для рублей и типа unsigned char — для копеек. Дробная часть (копейки) при выводе на экран должна быть отделена от целой части запятой. Реализовать сложение, вычитание, деление сумм, деление суммы на дробное число, умножение на дробное число и операции сравнения. http://www.cyberforum.ru/cpp-beginners/thread20674.html
Раскладка в Windows C++ Builder
У меня вопрос по Былдеру. Я хочу поменять раскладку в активном окне. Вписываю отслежевания нажатие клавишь через GetKeyState(). Но все же когда срабатывает моя функция ActivateKeyboardLayout(0, 0); раскладка меняется, только в окне моей программе а не в активном окне. Как можно исправить и кто что посоветует?
функция system() C++
Собственно, есть такая стандартная функция system(), она определена в stdlib.h и её прототип int system(const char *str); Краткое описание: Функция system() передает строку, адресуемую параметром str, в качестве команды для командного процессора операционной системы. Если функция system() вызывается с нулевым указателем, она возвращает ненулевое значение при условии доступности командного...
C++ Задача с указателями http://www.cyberforum.ru/cpp-beginners/thread20649.html
Здравствуйте. У меня проблема: никак не могу понять эти указатели:-|. Есть задача: пользователь вводит слово. затем, если число букв чётное - удаляем 2 центральных символа; если не чётное - то, соответственно, 1 центральный символ. Затем просто выводим результат. Если брать слово как буквенный массив, то проблемы никакой (просто двигаем индекс букв). НО нужно двигать именно указатель. Помогите...
C++ Вызов функций через таблицу прерываний Уважаемые участники форума cyberforum.ru, очень нужна ваша помощь. Столкнулся с такой вот проблемой: написал класс обработки 64-битных чисел со знаком с применением функций состоящих из ассемблерных вставок. Заменил вызовы этих функций на вызовы через таблицу векторов прерываний. В функции класса Converting(char*): int AsmBinNum::Converting(char* line) { int i; //--------------- length =... подробнее

Показать сообщение отдельно
maximus09
32 / 32 / 3
Регистрация: 29.12.2008
Сообщений: 75
14.01.2009, 19:58     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха
Да, квадратный корень из z лучше присваивать не переменной, а константе (для большей производительности).

Я извиняюсь. Я хотел оператор for написать так:

C++
1
for(int i = 2;i<=f/2-2;i++)


Что касается деления, то, если ты заметил, здесь происходит деление на 2. Это эквивалентно сдвигу влево на 1 бит (операция f>>1). Она происходит, если я не ошибаюсь, за 1 такт. А уж если действительно бороться за производительность, то результат этого выражения лучше присвоить даже не переменной, а константе. Доступ к константам, как известно, происходит быстрее.

Но я имел ввиду вовсе не это. Я боролся за уменьшение количества повторений в цикле.

Так, например по первому алгоритму число 18 будет представлено как 5+13. Для этого потребуется 4 повторения:
1. i=2
2. i=3
3. i=4
4. i=5

По второму алгоритму это же число представится 18=7+11. Потребуется только одно повторение:
1. i=2.

На самом деле, исследовав ряд примеров, мне показалось, что пара простых чисел для большинства четных f (естественно f принадлежит какому-то фиксированному диапазону), ближе к f/2, нежели к 2.

Однако сегодня я еще раз проверил это утверждение, основываясь на такой программе:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main(void){
    int r=0;
    for (int i = 4;i<=1000000;i+=2){
        this->Caption = i;
        int i1 = a1(i); //нахождение пары простых чисел по первому алгоритму
        int i2 = a2(i); //нахождение пары простых чисел по второму алгоритму
 
        if(i1>i2)
            r++;
 
        if(i1<i2)
            r--;  
    }
    cout<<r;
}
В результате получил число -313992. Это свидетельствует о том, что первый мой алгоритм требует гораздо меньшее количество итераций. Т.е. высказанное в данном сообщении предположение оказалось ошибочным.

Однако если брать маленьки диапазон перебора (скажем, от 4 до 80), то второй алгоритм будет работать ненамного, но все же быстрее. Вероятно, этот факт меня и ввел в заблуждение.

В итоге решайте сами, какой из алгоритмов использовать.

А кстати, хорошая идея операцию деления заменить операцией сдвига.
 
Текущее время: 04:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru