Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 24.02.2019
Сообщений: 15
1

Гипотеза Гольдбаха

24.02.2019, 20:39. Показов 4455. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Гипотеза Гольдбаха

Гипотеза Гольдбаха—утверждение о том, что любое чётное число, начиная с 4,
можно представить в виде суммы двух простых чисел.
Дано целое чётное положительное число N. Требуется найти и вывести все пары чисел
(P, Q), такие что:
P—целое положительноe простое число,
Q— целое положительноe простое число,
P+Q=N.
Input
Со стандартного устройства ввода в первой строке вводится положительное целое
четное число N (4<=N<=10^5 ).
Output
Требуется вывести все подходящие пары чисел (P, Q).
Пару чисел (E, F) нужно выводить раньше пары чисел (K, P) тогда и только тогда, когда
минимальный элемент пары чисел (E, F) меньше минимального элемента пары чисел (K,
P). Числа в паре нужно разделять пробелом, ставить пробел после второго члена
пары не нужно
.

Sample Input
10
Sample Output
3 7
5 5
Примечание
Попробуйте реализовать функцию isPrime(n), которая возвращает 1, когда число n
простое, и 0 иначе.

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
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
 
int v (int n) {
  int i,l=floor(sqrt(n));
 if (n<2) return 0; 
 else if (n<4) return 1; 
 else if (n%2==0) return 0;
 for (i=3; i<=l; i+=2) if (n%i==0) return 0;
 return 1;
}
 
int k( int n, int &n1, int &n2) {
  int halfn=n/2+1; int r=0;
 for (n1=2; n1<halfn; n1++)
 for (n2=n1; n2<n; n2++)
  if (n1+n2==n && v(n1) && v(n2)) {
   printf ("\n%lu %lu", n1, n2);
   r++;
  }
 return r;
}
int k1( int n,int &n1,int &n2) {
 for (n1=n/2; n1<=n; n1++) if (v(n1)) { n2=n-n1; return 1; }
 return 0;
}
 
int main () {
  int n,n1,n2;
 scanf ("%lu",&n);
 if (n<4 || n%2==1) {
     exit (1);
 }
 
 int found=k(n,n1,n2); 
 if (!found) 
 
 
return 0;
}
Помогите разобраться, задача не проходит, программа работает. По возможности, перепишите на C
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2019, 20:39
Ответы с готовыми решениями:

Гипотеза Гольдбаха
Гипотеза Гольдбаха заключается в том, что всякое четное число большее 2х можно представить в виде...

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

Гипотеза Гольдбаха: найти два таких простых числа, чтобы их сумма была равна заданному
Гипотеза Гольдбаха заключается в том, что всякое четное число большее 2х можно представить в виде...

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

2
6105 / 3460 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
24.02.2019, 23:00 2
Лучший ответ Сообщение было отмечено Я_коралл_ как решение

Решение

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
50
51
52
53
#include <iostream>
#include <vector>
 
using namespace std;
 
//инициализация вектора простых чисел до N
void init(vector<int>& prime, int N){
    prime.push_back(2);
    for (int i=3; i<N; ++i){
        int j=0;
        bool is_prime=true; 
        while (j<prime.size()){
            if (!(i%prime[j])){
                is_prime=false;
                break;
            }
            if (i/prime[j]<2) break;
            ++j;
        }
        if (is_prime) prime.push_back(i);
    }
}
 
 
 
int main(){
    cout<<"Input"<<endl;
    int N=0;
    while (true){
        cin>>N;
        if (4<=N&&N<=100000&&!(N%2)) break;
        if(cin.eof()) return 0;
        if(cin.fail()) cin.clear();
    }
    cout<<"Output"<<endl;
    vector<int> prime;
    init(prime,N);
    int count=prime.size()-1;;
    for (int i=0; i<=count; ++i){
        int j=count;
        while (i<=j){
            if (prime[i]+prime[j]<N) break;
            if (prime[i]+prime[j]==N){
                cout<<prime[i]<<' '<<prime[j]<<endl;
                count=j;
                break;
            }
            --j;
        }
    }
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 05.04.2023
Сообщений: 2
05.04.2023, 11:51 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <vector>
bool prime(int n);
using namespace std;
int main()
{
    system("chcp 1251");
    
    int nums;
    cout << "Введите конечное число последовательности: ";
    cin >> nums;
 
    //находим все простые числа до nums и сохраняем их в массив
    vector<int> simple_nums;
    for (int i = 1; i < nums; i++)
    {   
        //если число простое, добавляем его в массив простых чисел
        if (prime(i)) {
            simple_nums.push_back(i);
        }
    }
 
    
 
    //проходим по всем четным числам до nums начиная с 4 по теории гольбаха
    for (int i = 2; i < nums; i++)
    {
        //находим последовательность всех четных чисел
        if (i % 2 == 0) {
            //перебираем значения в массиве nums
            for (int n : simple_nums) {
                for (int k : simple_nums) {
                    //если эти простые числа в сумме дают само число(внешнего числа, это четное число больше 4) 
                    if (n + k == i) {
                        //выводим доказательство суммы простых чисел на равенство четному числу.
                        cout <<n<<"+"<<k<<"="<<i << endl;
                    }
                }
            }
        }
    }
}
//функция определия является ли число простым
bool prime(int n) {
    //идем от 2 до корня из введенного числа
    for (int i = 2; i <= sqrt(n); i++) {
        //если число переданное в аргумент функции без остатка делится на число в полседовательно это значит, что число не простое, вернем false
        if (n % i == 0)
            return false;
    }
    //после проверки, результатом не послужил false, следовательно не было выхода из программы, то мы вернем true можно сказать, что число простое.
    return true;
}
0
05.04.2023, 11:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2023, 11:51
Помогаю со студенческими работами здесь

Гипотеза Симона о факториале
Гипотеза Симона о факториале состоит в следующем: только четыре факториала являются произведением...

Составить алгоритм проверки гипотезы Гольдбаха
Составить алгоритм проверки гипотезы Гольдбаха о представлении каждого чётного числа n(n&gt;2) в виде...

Гипотеза Коллатца(ускорить код)
Существует вот такая вот гипотеза Коллатца(https://ru.wikipedia.org/wiki/Гипотеза_Коллатца),...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru