Проверить утверждение о том любое чётное число можно представить в виде суммы двух простых - C (СИ)
Формулировка задачи:
Проверить утверждение о том любое чётное число можно представить в виде суммы двух простых.Проверять до 50.
Прошу подкинуть идейку как решить.
зависает на 20
всё готово
Есть одна идея необходимо половину данного числа увеличивать до тех пор пока оно не станет простым, а второе находим вычитанием,только не могу реализовать это в коде
#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;
}#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;
}
Объяснение кода листинга программы
В этом коде:
- Инициализируются три переменные:
n,n1иn2. Переменнаяnсодержит число, которое нужно представить в виде суммы двух простых чисел. Переменныеn1иn2используются для поиска этих чисел. - Вычисляется значение переменной
halfnкак половины числаn, увеличенной на единицу. - Переменная
rинициализируется нулём и используется для подсчёта количества найденных комбинаций. - В цикле
forперебираются все числа от 2 доhalfn. - Вложенный в этот цикл
forперебирает все числа от текущего значенияn1доn, но не включаяn. - С помощью условного оператора
ifпроверяется, является ли суммаn1иn2равнойnи являются ли оба числа простыми. - Если условие выполняется, то с помощью функции
printfвыводится сообщение, содержащее числаn,n1иn2, а также увеличивается значение переменнойr. - По завершении внутренних циклов выводится общее количество найденных комбинаций.
- Функция возвращает значение переменной
r.