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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2009, 17:59   #11
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

нене - на самом деле )))) все юзается через формулу, но я так понял вы хотите через цикл или как? ))
capta1n вне форума Ответить с цитированием
Старый 02.01.2009, 18:03   #12
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

на самом деле все делается через формулу суммы арифметической прогрессии, так как Sn=(a1+An)*n/2, но я так понял надо через цикл, который с очень большими числами будет очень долго выполняться ( к примеру n=10^10 выполняется больше 10 минут )))) - в формуле a1=1 , An = n ( заданное число ), и n - заданное число и все - могу написать прогу - это вообще как делать нех, только бы extended поддержал ))
capta1n вне форума Ответить с цитированием
Старый 02.01.2009, 18:22   #13
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Код:
{$N+}
program natur;
var
 number,sum : extended;
begin

  assign (input,'input.txt');
  reset (input);
  readln (number);
  close (input);

  sum:=(1+number)*number/2;

  assign (output,'output.txt');
  rewrite( output);
  writeln (sum);
  close (output);

end.
Вот эта программа будет выполняться элементарно, ибо человечество придумало такую зумечательную вещь как формула))) задача программиста не просто тупо писать циклы, там где они видны, но искать способы их устранения или укорочения, в общем обеспечивать читабельность кода и облегчения программы ( время исполнения, память, занимаемую программой и так далее )
capta1n вне форума Ответить с цитированием
Старый 02.01.2009, 21:30   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
заданному числу n определить количество пар простых чисел(р1,р2) таких что их сумма не превосходит n и является простым числом
во входном файле число n(1<=n<=10000)
в выходном файле ответ на задачу
ну вот, попробуйте, вторая задача от меня:


Код:
{Внимание! N должно быть от 2 и выше!!!!!}
function IsProstoe(N: LongInt): boolean;
var 
  i: integer; 
begin 
  IsProstoe := true; 
  if abs(N) < 3 then 
    exit; 
  for i := 2 to abs(N) - 1 do 
    if abs(N) mod i = 0 then 
      begin 
        IsProstoe := false; 
        exit; 
      end; 
end; 

var n, i,k, kol: integer;
  fil : Text;
  Prost: array[1..5000] of integer;
  IProst : integer;
begin
  IProst := 0;

  assign(fil,'c:\in.txt');
  reset(fil);
  readln(fil,n);
  Close(fil);
    
  for i:=2 to  n do
   if IsProstoe(i) then begin
     inc(IProst);
     Prost[IProst] := i
   end;

  kol := 0;
  for k:=1 to IProst  do
    for i:=1 to IProst  do
      if (Prost[k]+Prost[i])<=n then
           if IsProstoe(Prost[k]+Prost[i]) then begin
             Inc(kol);
             { WriteLn(Prost[k]:1,' + ',Prost[i]:1,' = ',(Prost[k]+Prost[i]):1);}
           end;
  {WriteLn('kol=',kol:1);}
  assign(fil,'c:\out.txt');
  rewrite(fil);
  WriteLn(fil,kol:1);
  close(fil);  
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.01.2009, 21:00   #15
давид меликянц
 
Регистрация: 02.01.2009
Сообщений: 6
По умолчанию мне вот тут подсказали про вторую!

{$I-,Q-,R-,S-,D-,L-}
{$I+,Q+,R+,S+,D+,L+}
program Solution;

const
inf = 'prime.in';
ouf = 'prime.out';
maxn = 10002;

type
int = longint;

var
p : array [0..maxn] of int;
n, k, res, i, j : int;

function isprime(a : int) : boolean;
var
i : int;
begin
i := 1;
while(i <= k)and(p[i] * p[i] <= a)do begin
if a mod p[i] = 0 then begin
isprime := false;
exit
end;
inc(i)
end;
isprime := true
end;

begin
assign(input, inf);
reset(input);
read(n);
close(input);

p[1] := 2;
p[2] := 3;
k := 2;
i := 1;
while(i * 6 - 1 <= n)do begin
if isprime(i * 6 - 1) then begin
inc(k);
p[k] := i * 6 - 1
end;
if(i * 6 + 1 <= n)and(isprime(i * 6 + 1))then begin
inc(k);
p[k] := i * 6 + 1
end;
inc(i)
end;

for i := 1 to k - 1 do
if p[i] + 2 = p[i + 1] then inc(res);

assign(output, ouf);
rewrite(output);
writeln(res);
{ for i := 1 to k - 1 do
if p[i] + 2 = p[i + 1] then writeln(2, ' ', p[i]);}
close(output)
давид меликянц вне форума Ответить с цитированием
Старый 04.01.2009, 00:05   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Давид,
1) а чем Вам мой вариант не подошёл? :-)
2) в приведённой Вами программе вторая строчка с директивами компилятора ПОЛНОСТЬЮ перекрывает первую - поэтому первую можно смело удалить!
3) Решение очень остроумное!
А сумеете это решение защитить?! вот этот ключевой цикл:
Код:
for i := 1 to k - 1 do
  if p[i] + 2 = p[i + 1] then inc(res);
Тут мы считаем сколько простых чисел отличаются друг от друга на ровно два!
Вы знаете, почему это делается так? Преподователю сумеете объяснить? ;-)

впрочем. это дело хозяйское. Главное, что задача решена.

Кстати, спасибо, что отписались в теме и привели решение. Мне понравилось....
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите решить 2 задачи Pashtet Паскаль, Turbo Pascal, PascalABC.NET 6 06.11.2008 04:18
Помогите решить задачи. (С++) Memfis_nya Помощь студентам 6 04.11.2008 17:44
Помогите решить задачи в C++ marsius Помощь студентам 4 18.04.2008 23:33
Помогите решить задачи Andyst Помощь студентам 3 25.12.2007 15:14
Помогите решить задачи! Вилен Помощь студентам 2 10.10.2007 23:12