Проверить утверждение о том любое чётное число можно представить в виде суммы двух простых - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Проверить утверждение о том любое чётное число можно представить в виде суммы двух простых.Проверять до 50. Прошу подкинуть идейку как решить.
Есть одна идея необходимо половину данного числа увеличивать до тех пор пока оно не станет простым, а второе находим вычитанием,только не могу реализовать это в коде
#include <stdio.h>
int main()
{ 
    int n,a,f,g=0,i,r,b;
    for(n=8;n<=50;n+=2)
    {
        printf("%d=",n);
        f=n/2;
        a=f;
        while(g==0)
        {
         for(i=2;i<=a&&a%i!=0;i++);
         if(i<=a/2)
             g=0;
         else
             g=1;
         if(g==0)
         {
             a++;
         }
         else
         {
             b=n-a;
             for(r=2;r<=b&&b%r!=0;r++);
             if(r<=b/2)
                 g=0;
             else
                 g=1;
         }
         if(g==1)
         printf("%d+%d\n",a,b);
        }
        g=0;
    }
    return 0;
}
зависает на 20
#include <stdio.h>
int main()
{ 
    int n,a,f,g=0,i,r,b,d=0;
    for(n=4;n<=50;n+=2)
    {
        printf("%d=",n);
        f=n/2;
        a=f;
        while(g==0)
        {
         for(i=2;i<=a&&a%i!=0;i++);
         if(i<=a/2)
             g=0;
         else
             g=1;
         if(g==0)
         {
             a++;
         }
         else
         {
             b=n-a;
             for(r=2;r<=b&&b%r!=0;r++);
             if(r<=b/2)
                 d=1;
             else
                 g=1;
         }
         if(d==1)
         {
          a++;
          g=0;
          d=0;
         }
         if(g==1)
         {
         printf("%d+%d\n",a,b);
         }
        }
        g=0;
        d=0;
    }
    return 0;
}
всё готово
может кому пригодится

Решение задачи: «Проверить утверждение о том любое чётное число можно представить в виде суммы двух простых»

textual
Листинг программы
int goldbah(unsigned long int n,unsigned long int &n1,unsigned long int &n2) {
 unsigned long int halfn=n/2+1; int r=0;
 for (n1=2; n1<halfn; n1++)
 for (n2=n1; n2<n; n2++)
  if (n1+n2==n && simple(n1) && simple(n2)) {
   printf ("\n%lu=%lu+%lu",n,n1,n2);
   r++;
  }
 return r;
}

Объяснение кода листинга программы

В этом коде:

  1. Инициализируются три переменные: n, n1 и n2. Переменная n содержит число, которое нужно представить в виде суммы двух простых чисел. Переменные n1 и n2 используются для поиска этих чисел.
  2. Вычисляется значение переменной halfn как половины числа n, увеличенной на единицу.
  3. Переменная r инициализируется нулём и используется для подсчёта количества найденных комбинаций.
  4. В цикле for перебираются все числа от 2 до halfn.
  5. Вложенный в этот цикл for перебирает все числа от текущего значения n1 до n, но не включая n.
  6. С помощью условного оператора if проверяется, является ли сумма n1 и n2 равной n и являются ли оба числа простыми.
  7. Если условие выполняется, то с помощью функции printf выводится сообщение, содержащее числа n, n1 и n2, а также увеличивается значение переменной r.
  8. По завершении внутренних циклов выводится общее количество найденных комбинаций.
  9. Функция возвращает значение переменной r.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы