Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Krusad
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 8
1

Представимо ли данное натурально число в виде суммы двух простых слагаемых

08.10.2012, 09:39. Просмотров 2107. Ответов 4
Метки нет (Все метки)

Составить программу, позволяющую выяснить, представимо ли данное натурально число M (M>2) в виде суммы двух простых слагаемых, больших единицы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2012, 09:39
Ответы с готовыми решениями:

определить, можно ли представить данное число в виде произведения двух простых сомножителей
составьте программу,определяющую,можно ли представить данное натуральное число...

Данное число представить в виде суммы кубов двух натуральных чисел
напишите программу !дано натуральное число в виде суммы кубов двух натуральных...

Представить любое чётное число большее двух в виде суммы двух простых чисел
Конъектура Гольдбаха Существют много математических высказываний, истинность...

Выяснить, можно ли заданное число представить в виде суммы двух простых чисел
Выяснить, можно ли заданное число представить в виде суммы двух простых...

Представить число N в виде суммы M натуральных слагаемых так, чтобы сумма синусов слагаемых была максимальной
Даны натуральные числа N и M. Нужно представить число N в виде суммы M...

4
Puporev
Модератор
55058 / 42326 / 29229
Регистрация: 18.05.2008
Сообщений: 100,021
08.10.2012, 10:27 2
Pascal
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
uses crt;
function Pros(n:integer):boolean;
var k,i:integer;
    f:boolean;
begin
k:=n;
if k<2 then f:=false
else
 begin
  f:=true;
  i:=2;
  while(i*i<=k)and f do
  if k mod i=0 then f:=false
  else i:=i+1;
 end;
Pros:=f;
end;
var m,n:integer;
    f:boolean;
    c:char;
begin
repeat
clrscr;
repeat
write('Введите натуральное число M=');
readln(m);
until m>0;
if m<4 then f:=false
else
 begin
  f:=false;
  n:=2;
  while(n<m-1)and not f do
  if Pros(n)and(pros(m-n)) then
   begin
    f:=true;
    writeln(m,'=',n,'+',m-n)
   end
  else n:=n+1;
 end;
if not f then writeln('Число M не представимо в виде суммы двух простых чисел');
writeln('Повторить Y/y-да, другое-нет');
readln(c);
until UpCase(c)<>'Y';
end.
Добавлено через 1 минуту
Цитата Сообщение от Krusad Посмотреть сообщение
двух простых слагаемых, больших единицы.
1 не простое число, поэтому это условие лишнее.
1
Krusad
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 8
08.10.2012, 11:03  [ТС] 3
Большое спасибо. Сейчас буду разбираться. А по поводу лишнего условия - просто так было в задании написано, поэтому я и написал.

Добавлено через 10 минут
А можно не много теории про функцию Pros? И в целом о ходе выполнения программы?
0
Puporev
Модератор
55058 / 42326 / 29229
Регистрация: 18.05.2008
Сообщений: 100,021
08.10.2012, 12:27 4
Pascal
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
uses crt;
//функция логического типа, определвет простое ли число
function Pros(n:integer):boolean;
var k,i:integer;
    f:boolean;
begin
k:=n;//запомним число (а надо ли? посмотри, вроде и не надо)
if k<2 then f:=false//если оно мньше 2, то не простое
else//иначе
 begin
  f:=true; //предположим что плстое
  i:=2;//начнем делить на все, начиная с 2
  while(i*i<=k)and f do //пока делитель не больше корня из числа и не делится
  if k mod i=0 then f:=false //ксли делится-составное
  else i:=i+1;//иначе проверяем следующее
 end;
Pros:=f;//значение функции
end;
var m,n:integer;
    f:boolean;
    c:char;
begin
repeat
clrscr;
repeat
write('Введите натуральное число M=');
readln(m);
until m>0; //вводим натуральноечисло, 0 не считаем, он спорно относится к натуральным
if m<4 then f:=false//если число <4 не может быть представлено, мин=2+2
else //если 4 или больше
 begin
  f:=false; //предположим что нельзя
  n:=2;//начнеи с 2
  while(n<m-1)and not f do //пока первое число меньше данное-1
  if Pros(n)and(pros(m-n)) then//если простое и простое их разность
   begin
    f:=true;//возможно
    writeln(m,'=',n,'+',m-n)//выводим их
   end
  else n:=n+1;//иначе наращиваем n
 end;
if not f then writeln('Число M не представимо в виде суммы двух простых чисел');
writeln('Повторить Y/y-да, другое-нет');//предлааем повторить
readln(c);
until UpCase(c)<>'Y';//если ввли не y/Y, то выжод из программы(не обязательно)
end.
0
Dmitrinik
536 / 393 / 99
Регистрация: 18.08.2012
Сообщений: 1,015
08.10.2012, 19:16 5
Pascal
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
54
55
56
Uses Crt;
Var n, n1, n2 : Word;
 
Function PrimeTest(nX:Word): Boolean; {Функция - тест на простоту}
Var P : Word;
  Begin
    If (nX=3) or (nX=5) or (nX=7) then PrimeTest:=True
    Else
      Begin
        P:=1;
        Repeat
          P:=P+2;
          If nX mod P=0 then
            Begin
              PrimeTest:=False; Exit; {число составное}
            end;
        Until (P*P)>=nX;
        PrimeTest:=True;
      end;
  end;
{===============================}
Begin
  ClrScr;
  WriteLn('Ввод числа');
  repeat
    ReadLn(n);
  until n>3;
  If Odd(n) then {Если введенное число нечетное, то одним из слагаемых его
                        простых может быть только двойка!}
    Begin
      n1:=n-2; {Вычтем эту двойку из числа, а затем проверим его на простоту}
      If PrimeTest(n1) then WriteLn('Yes: 2, ',n1:6)
      Else                  WriteLn('No');
    end
  Else {Если число четное, то оно всегда представимо либо в виде суммы 2+2,}
    If n=4 then WriteLn('Yes: 4=2+2')
    Else {либо в виде суммы двух простых нечетных чисел!}
      Begin
        n1:=n div 2;  {Если после деления на 2}
        n2:=n1;
        If not Odd(n1) then  {частное оказалось четным, то}
          Begin
            n1:=n1-1; n2:=n2+1;  {вычтем и прибавим по единице}
          end;
        Repeat
          If PrimeTest(n1) then {Если первое слагаемое простое, то}
            If PrimeTest(n2) then {имеет смысл проверить второе}
              Begin
                WriteLn('Yes: ',n1:6,n2:6); {Закончим на первой же найденной сумме}
                Break;
              end;
          n1:=n1-2; n2:=n2+2; {Проверим следующую пару}
        Until n1<3;
      end;
  ReadLn;
End.
0
08.10.2012, 19:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2012, 19:16

Дано натуральное число P. Найти все натуральные числа, которые нельзя представить в виде суммы двух простых чисел
Дано натуральное число P. Найти все натуральные числа, которые нельзя...

Представить натуральное число в виде суммы простых натуральных чисел
Здравствуйте. :) Прошу помощи в написании алгоритма для элементарной задачи.....

Можно ли число x представить в виде произведения двух простых чисел
Помогите пожалуйста сделать. Напишите пожалуйста программу полностью и по...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru