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

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

11.01.2009, 18:03. Показов 11828. Ответов 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
1465 / 966 / 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
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru