Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2014, 13:46   #1
Чихачев
Новичок
Джуниор
 
Регистрация: 03.11.2014
Сообщений: 1
Вопрос Алгоритм для Бинарной проблемы Гольдбаха С++

Код:
#include <iostream>
#include <math.h>
#include <windows.h>

using namespace std;

int main()
{
int h; /*Количество делителей первого слагаемого*/
int h2; /*Количество делителей второго слагаемого*/
int g=4; /*Наше число для проверки, собственно первое значение 4.*/
int x, y; /*Слагаемые*/
x=g/2; /*Первые их значения*/
y=g/2; 
while(1>0) /*Бесконечный цикл*/
{
for(int i=1; i<=x; i++)
{
if(x/i==int(x/i)){
h+=1;
} /*Этой штукой проверяем кол-во делителей первого числа*/
}
for(int i=1; i<=y; i++)
{
if(y/i==int(y/i)){
h2+=1;
} /*Этой штукой проверяем кол-во делителей второго числа*/
}
if (h==h2 && h==2){
cout << g << "-True" << x << "+" << y;;
g+=2;
x=g/2;
y=g/2;
h=0;
h2=0;
} /*Если у обоих слагаемых делителей только 2 (тобишь они простые), то мы рассматриваем следующее четное число, остальные переменные возвращаем к начальному значению.*/
else{
x-=1;
y+=1;
} /*Если делители не простые рассматриваем следующий вариант 2 слагаемых. И так пока не рассмотрим все варианты.*/
if (x==0){
break;
cout << g << "-False";
} /*Если варианты слагаемых каждый раз не подходили, и в конце концов x стал равен нулю, то мы нашли четное число, которое является контр-примером => прекращаем цикл.*/
}
system("PAUSE");
}
При запуске программы она тут же завершается. Что не так?

Последний раз редактировалось ACE Valery; 03.11.2014 в 18:38.
Чихачев вне форума Ответить с цитированием
Старый 03.11.2014, 17:45   #2
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Код:
    for (int i = 1; i <= x; i++) {
        if (x / i == int(x / i)) {
            h += 1;
        } /*Этой штукой проверяем кол-во делителей первого числа*/
    }
    for (int i = 1; i <= y; i++) {
        if (y / i == int(y / i)) {
            h2 += 1;
        } /*Этой штукой проверяем кол-во делителей второго числа*/
    }
Довольно странные условия: if (x / i == int(x / i)) и if (y / i == int(y / i)), учитывая что x, y, i итак являются типами int. К чему они Вам?

Возможно стоит инициализировать переменные перед "бесконечным" циклом?
Код:
    h = 0;
    h2 = 0;
Lardes вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить для этого числа N гипотезу Гольдбаха Devid92 Помощь студентам 3 30.11.2016 21:32
Проблема Гольдбаха sidestep Общие вопросы C/C++ 1 25.02.2012 17:14
Метод бинарной вставки parkito Общие вопросы C/C++ 0 30.11.2011 09:23
Алгоритм для программы Kostik777 Помощь студентам 2 15.01.2010 12:09