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

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

11.01.2009, 18:03. Показов 11761. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru