Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/62: Рейтинг темы: голосов - 62, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 11.01.2009
Сообщений: 40

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

11.01.2009, 18:03. Показов 11797. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1) Написать программу-фильтр, которая при нажатии любых клавиш выводит на экран только буквы и цифры, при этом ука¬зывая, что выводится: буква или цифра.

2) Написать программу вывода всех четных чисел в диапазоне от 2 до 100 включительно

3) Дано четное число п > 2. Проверить для него гипотезу Гольд¬баха; каждое четное п представляется в виде суммы двух простых чисел.

4) Дана последовательность чисел аь аъ ..., ап. Указать наименьшую длину числовой оси, содержащую все эти числа.

5) Удалить часть символьной строки, заключенной в скобки (вместе со скобками).
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2009, 18:03
Ответы с готовыми решениями:

Дано четное число n > 2. Проверить для него гипотезу Гольдбаха
Дано четное число n > 2. Проверить для него гипотезу Гольдбаха, каждое четное n представляется в виде суммы двух простых чисел. ...

Дано четное число n > 2. Проверить для этого числа гипотезу Гольдбаха
Дано четное число n > 2. Проверить для этого числа гипотезу Гольдбаха. Эта гипотеза (по сегодняшний день не опровергнутая и полностью не...

Дано четное число n > 2. Проверить для этого числа гипотезу Гольдбаха. Эта гипотеза (по сегодняшний день не опровергнутая и полностью не доказанная
Нужна ваша помощь!Кто может помогите мне...

10
 Аватар для manfeese
133 / 132 / 29
Регистрация: 04.01.2009
Сообщений: 415
11.01.2009, 18:40
2)
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream.h>
#include <conio.h>
 
int main()
{
    for (int i=2; i<=100; i++)
     if (i%2 == 0) { cout << i << " ";}
 
    getch();
    return 0;
}
Добавлено через 18 минут 2 секунды
1)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream.h>
#include <conio.h>
int main()
{
    char key;
 
    cin >> key;
    if (isdigit(key)) {cout << "cifra\n";}
    if ((isupper(key))||(islower(key))) {cout << "bukva\n";}
 
    getch();
    return 0;
}
0
43 / 39 / 12
Регистрация: 05.01.2009
Сообщений: 394
11.01.2009, 18:56
лучше в цикле вроде

while(cin>>key, int(key)!=32) // пробел кажится
{.......}

Добавлено через 6 минут 3 секунды
5)
C++
1
2
3
4
5
6
7
typedef std :: string :: size_type position;
position pos1, pos 2;
string s("kkkkkkk(ggggggggg)ppppppp");
pos1=s.find("(");
pos2=s.find(")");
s.erase(pos1, pos2-pos1);
cout<<s;
0
12 / 12 / 2
Регистрация: 27.09.2008
Сообщений: 43
11.01.2009, 19:48
Проверка гипотезы Гольдбаха
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
#include <stdio.h>
 
#define NOT_SIMPLE 1
#define YES_SIMPLE 0
 
int simple(int num);
 
int main()
{
    unsigned int num;
    int one=4,two=2;
    if(scanf("%u",&num)!=1 || num%2==1 || num<3){
  puts("Invalid number");
        return 1;
    }
    while(one>two)
    {
     one=num-two;
        if(simple(one)==YES_SIMPLE && simple(two)==YES_SIMPLE){
            printf("%d+%d=%d\n",one,two,num);
            return 0;
        }
        two++;
    }
    puts("FALSE");
 return 0;
}
 
int simple(int num)
{
    int k;
    for(k=num-1;k!=1;k--)
        if(num%k==0)return NOT_SIMPLE;
 return YES_SIMPLE;
}
Прога, тормознутая, но решает верно
1
32 / 32 / 4
Регистрация: 29.12.2008
Сообщений: 75
11.01.2009, 20:17
Лучший ответ Сообщение было отмечено как решение

Решение

Задачи сделаны в C++ Builder 6.

Залача № 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
//---------------------------------------------------------------------------
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
        int c;
        do{
            char s[5];
            c = getch();
            if(('0'<=c)&&(c<='9'))
                cout<<"vvedena cifra ";
            else if((('a'<=c)&&(c<='z'))||(('A'<=c)&&(c<='Z')))
                cout<<"vvedena bukva ";
            else if(((-128<=c)&&(c<=-81))||((-32<=c)&&(c<=-15)))
                cout<<"vvedena bukva ";
            else if(c ==' ')
                break;
            else
                c = 0;
 
            cout<<(char)c;
            if (c != 0) cout<<endl;
        }while(c != 32);
 
        
        return 0;
}
//---------------------------------------------------------------------------
Ввод происходит циклически. Для завершения ввода необходимо ввести пробел.
Воспринимаются как русские, так и английские буквы.

Задача 2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//---------------------------------------------------------------------------
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
    for (int i = 2;i<=100;i+=2){
        cout<<i<<endl;
    }
    getch();
    return 0;
}
//---------------------------------------------------------------------------

Задача 3

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
//---------------------------------------------------------------------------
#pragma hdrstop
#include <math.h>
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------
 
#pragma argsused
//Определяет, является ли число простым
bool prost(int z);
 
int main(int argc, char* argv[])
{
    int f;
    printf("Vvedite chetnoe chislo ");
    scanf("%d",&f);
 
    for(int i = 2;i<=f-2;i++)
        if(prost(i)&&prost(f-i)){
            printf("%d = %d + %d",f,i,f-i);
            break;
        }
 
    getch();
 
    return 0;
}
//---------------------------------------------------------------------------
bool prost(int z){
    for(int i = 2; i<=sqrt(z);i++)
        if (z%i == 0){
            return false;
        }
 
    return true;
}
//---------------------------------------------------------------------------
Задача 4

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
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <iostream.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
    int n;
 
    randomize();
 
    printf("Kolichestvo chisel v posledovatelnosti ");
    scanf("%i",&n);
 
    int* a =(int*)calloc(n,sizeof(n));
 
//Инициализация массива случайными значениями
    for(int i = 0;i<n;i++){
        a[i] = random(n);
        cout<<a[i]<<endl;
    }
 
    int max= a[0], min = a[0];
 
    for(int i = 1;i<n;i++){
        if(a[i]>max)
            max = a[i];
 
        if(a[i] < min)
            min = a[i];
    }
 
    printf("Naibolshaya dlina chislovoy osi ravna %i",max-min);
 
    getch();
    free(a);
    a=NULL;
 
    return 0;
}
//---------------------------------------------------------------------------

Задача 5

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
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
    char s[300];
    cout<<"Vvedite stroku "<<endl;
    cin>>s;
 
    bool skobka = false;
    int n=0;
 
    for(int i = 0;i<strlen(s);i++){
        if(s[i] == '(')
            skobka = true;
 
        if(!skobka)
            s[n++] = s[i];
 
        if(s[i] == ')')
            skobka = false;
    }
 
    s[n] = '\0';
 
    printf("itog %s",s);
    getch();
    return 0;
}
//---------------------------------------------------------------------------
Желаю удачи!!!
3
0 / 0 / 0
Регистрация: 11.01.2009
Сообщений: 40
11.01.2009, 21:18  [ТС]
Я в шоке ** ребята!! Вы просто гении!!! Если ещё правильно будет то вабще круть))) осталось только блок-схемы сделать xD если кто нить тут этим промышляет дайте знать)) если нет... бу сам мудрить *__*
0
32 / 32 / 4
Регистрация: 29.12.2008
Сообщений: 75
13.01.2009, 19:43
Предлагаю другой способ решения задачи о гипотезе Гольдбаха. Принцип остается тем же, но в подавляющем большинстве случаев новая программа работает быстрее за счет уменьшения количества повторений в цикле.

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
//---------------------------------------------------------------------------
#pragma hdrstop
#include <math.h>
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------
 
#pragma argsused
//Îïðåäåëÿåò, ÿâëÿåòñÿ ëè ÷èñëî ïðîñòûì
bool prost(int z);
 
int main(int argc, char* argv[])
{
    int f;
    printf("Vvedite chetnoe chislo ");
    scanf("%d",&f);
 
    for(int i = f/2-2;i>=0;i--)
        if(prost(f/2-i)&&prost(f/2+i)){
            printf("%d = %d + %d",f,f/2-i,f/2+i);
            break;
        }
 
    getch();
 
    return 0;
}
//---------------------------------------------------------------------------
bool prost(int z){
    for(int i = 2; i<=sqrt(z);i++)
        if (z%i == 0){
            return false;
        }
 
    return true;
}
//---------------------------------------------------------------------------
1
12 / 12 / 2
Регистрация: 27.09.2008
Сообщений: 43
13.01.2009, 21:44
Раз уж речь зашла о производительности, то нужно в функции prost(int z), выражение sqrt(z) присвоить переменной, т.к. оно постоянно, а в цикле оно при каждом проходе вычисляется заново.

Добавлено через 4 минуты 52 секунды
И почему ты думаешь, что первый вариант медленнее чем второй? Мне кажется это не так, по причине того, что во втором варианте используется деление. Деление требует больше процессорного времени, чем простое вычитание.
0
32 / 32 / 4
Регистрация: 29.12.2008
Сообщений: 75
14.01.2009, 19:58
Да, квадратный корень из 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), то второй алгоритм будет работать ненамного, но все же быстрее. Вероятно, этот факт меня и ввел в заблуждение.

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

А кстати, хорошая идея операцию деления заменить операцией сдвига.
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
21.01.2009, 03:50
Цитата Сообщение от Saitooo Посмотреть сообщение
Я в шоке ** ребята!! Вы просто гении!!! Если ещё правильно будет то вабще круть))) осталось только блок-схемы сделать xD если кто нить тут этим промышляет дайте знать)) если нет... бу сам мудрить *__*
это точно. что сам будешь мудрить (блок-схемы)...
Не в тему:
Мне от интересно : Зачем учить языки программирования если оно тебе не надо!!!!
1
0 / 0 / 0
Регистрация: 27.05.2020
Сообщений: 7
10.11.2020, 17:38
а можите пж сделать на с# 3 задание? спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.11.2020, 17:38
Помогаю со студенческими работами здесь

Проверить для числа гипотезу Гольдбаха
Дано четное число n&gt;2. Проверить для этого числа гипотезу Гольдбаха. Эта гипотеза (по сегодняшний день не опровергнутая и полностью не...

Проверить для числа гипотезу Гольдбаха
Дано четное число n&gt;2. Проверить для этого числа гипотезу Гольдбаха. Эта гипотеза (по сегодняшний день не опровергнутая и полностью не...

проверить для числа гипотезу Гольдбаха
Люди помогите программу составить, а то в паскале вобще не понимаю...:cry: дано четное число n&gt; 2; проверить для этого числа гипотезу...

Проверить для заданного числа Гипотезу Гольдбаха
Заданное четное число n&gt; 2. Проверить для этого числа гипотезу Гольбаха: каждое четное n&gt; 2 можно представить в виде суммы двух простых...

Проверить для этого числа N гипотезу Гольдбаха
Дано четное число N. Проверить для этого числа гипотезу Гольдбаха. Эта гипотеза(по сегодняшний день не опровергнутая и полностью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru