Модератор: Модераторы
Evgen писал(а):Сначала хочу спросить включена ли библиотека MPArith автоматически у FRC, ели нет, то как ее подключить?
// Compute M: Sqr(B) <= M <= 10000000
M := 1;
while M * M < B do
M := M * 2;
Дож писал(а):2. Вместо вычисления корня встроенной функцией Sqrt лучше аккуратно руками вычислить какую-нибудь оценку, например, так:
var
I: Int64;
F: Single;
begin
I := 1125899991909595;
F := Sqrt(I);
Writeln((F + 1) * (F + 1) < I);
end.
D:\data\temp>fpc sqrt.pas && sqrt.exe
Free Pascal Compiler version 3.0.4 [2017/10/06] for i386
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling sqrt.pas
Linking sqrt.exe
8 lines compiled, 0.0 sec, 25504 bytes code, 1252 bytes data
TRUE
И да, в вашем последнем примере число I на 4 порядка больше, чем по условию задачи.
program prostere;
var s:ansistring; a,b,i,j,k:int64;
begin
readln(a,b); s:='0';
for i:=2 to b do s:=s+'1';
i:=2;
while i*i<b do begin
if s[i]='1' then begin
j:=i*i; while j<=b do begin
s[j]:='0'; j:=j+i end;
end;
i:=i+1;
end;
k:=0;
for i:=a to b do
if s[i]='1' then k:=k+1;
writeln(k);
end.
Тут лимит времени (1.043 сек)
program prostere;
var s:array of byte; a,b,i,j,k:int64;
begin
readln(a,b); setlength(s,b+1);
s[1]:=0;
for i:=2 to b do s[i] :=1;
i:=2;
while i*i<b do begin
if s[i]=1 then begin
j:=i*i; while j<=b do begin
s[j]:=0; j:=j+i end;
end;
i:=i+1;
end;
k:=0;
for i:=a to b do
if s[i]=1 then k:=k+1; {end;}
writeln(k);
s := nil;
end.
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4