Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача с числами

Автор: Гил Бейтс 3.05.2007 2:47

Товарищи помогите пожалуйста!

Определить все представления нечетного числа n в виде суммы трех простых чисел.

ps Большая просьба выложить алгоритм, чтобы было понятнее. Спасибо.

Автор: Адель 3.05.2007 3:27

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

Автор: volvo 3.05.2007 3:43

Цитата(Адель @ 2.05.2007 23:27)
любых трех простых чисел?

Именно любых... Это так называемая "слабая проблема Гольдбаха". Определение - здесь:
http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%93%D0%BE%D0%BB%D1%8C%D0%B4%D0%B1%D0%B0%D1%85%D0%B0

P.S. По поводу решения задачи - ограничения на величину числа есть?
Для не очень больших чисел (не превышающих 255) практически полное решение лежит здесь: http://forum.pascal.net.ru/index.php?s=&showtopic=6327&view=findpost&p=47388

Все что надо будет доделать - это заполнить множество diapazon простыми числами, используя, например, метод http://volvo71.narod.ru/faq_folder/set_type.htm#set_sieve_1, и добавить в программу условие, ограничивающее количество чисел тремя...

Автор: Гил Бейтс 21.06.2007 2:33

вот собственно сделал, только есть проблема с которой не могу справиться:программа не хочет предствлять число с двумя и более одинаковыми числами(прим. 5+5+1=11)



program x;
uses crt;
var a:array[1..999] of integer;
b, i,j,k,n,c:integer;
begin
clrscr;
writeln('vvesti n');
readln(n);
for i=l to n do
begin
for j:=1 to i div 2 do
begin
if i mod j=0 then k:=k+1;
end;
if k=l then
begin
c:=c+l;
a[c]:=i;
end;
k:=0;
end;
b:=0;
for i:=1 to с do
begin
for j:=i+1 to c do
begin
for k:=j+1 to c do
begin.
if a[i]+a[j]+a[k]=n then begin writeln(a[i],’+’,a[i],'+',a[k]);
b:=b+1;
end;
end;
end;
end;
writeln(‘s=’,s:2);
readkey;
end.




Автор: Гил Бейтс 21.06.2007 12:42

гм...

Автор: мисс_граффити 21.06.2007 13:57

b:=0;
for i:=1 to с do
begin
for j:=i+1 to c do
begin
for k:=j+1 to c do

ну, видимо, надо по-другому границы циклов расставить.
то есть не j:=i+1, a j:=i. и с k так же.