ele usa 2 arquivos para armazenar os primos (um binário e outro em TXT)
eu usei 2 arquivos pois o TXT é para mera visualização dos números primos e o binário eu uso para acessá-los
o algoritimo do programa é o seguinte: ele verifica se um numero é primo ou não dividindo por todos os primos menores que a raiz quadrada do número até dar uma divisão exata.
o programa é esse:
Program primos;
USES WINCRT;
function primo(n: longint):boolean; {cria uma função para verifiar se o numero é primo ou não...}
var
ARQ_PRI: file of longint;
count,den: longint;
begin
assign(ARQ_PRI, 'PRIMOS.BI');
reset(ARQ_PRI);
count:=-1;
repeat
count:=count+1; {divide o numero pelos primos já guardados no arquivo}
seek(ARQ_PRI,count);
read(ARQ_PRI,den);
until((count = (filesize(ARQ_PRI)-1))OR((n mod den)= 0)OR(den >= (trunc(sqrt(n))+1)));
if (count = (filesize(ARQ_PRI)-1))then {caso o arquivo de primos acabe}
begin
repeat
den:=den+1; {continua as divisões mas agora de 1 em 1 ao invés de primo em primo}
until (den >= (trunc(sqrt(n))+1))OR((n mod den)= 0);
if (den >= (trunc(sqrt(n))+1)) then primo:=TRUE
else primo:=FALSE
end
else begin
if ((n mod den)= 0)then primo:=FALSE;
if (den >= (trunc(sqrt(n))+1)) then primo:=TRUE;
end;
close(ARQ_PRI);
end;
var
ARQ_PRI : file of longint;
quant,count,num: longint;
PRI_TXT: text;
ans: char;
begin
ans:='S';
repeat
clrscr;
assign(ARQ_PRI, 'PRIMOS.BI');
reset(ARQ_PRI);
assign(PRI_TXT, 'PRIMOS.TXT');
reset(PRI_TXT);
append(PRI_TXT);
writeln('Calculadora de primos.');
writeln('Já foram calculados ',filesize(ARQ_PRI),' Primos!');
writeln('Entre com a quantidade de primos a ser calculada:');
readln(quant);
seek(ARQ_PRI,(filesize(ARQ_PRI)-1));
read(ARQ_PRI,num);
count:=0;
repeat
num:=num+1;
if (primo(num)) then
begin
count:=count+1;
append(PRI_TXT);
writeln(PRI_TXT,num);
seek(ARQ_PRI,filesize(ARQ_PRI));
write(ARQ_PRI,num);
clrscr;
writeln(((count*100)div(quant)),'%');
end;
until count = quant;
close(PRI_TXT);
close(ARQ_PRI);
repeat
writeln('Deseja calcular mais primos?(S/N)');
ans:=READKEY;
if NOT(((ans='N') OR (ans='n')) OR ((ans='S') OR (ans='s'))) then writeln('Opção inválida!');
until (((ans='N') OR (ans='n')) OR ((ans='S') OR (ans='s')));
until ((ans='N') OR (ans='n'));
writeln('Pronto!');
end.
O problema é que esse programa presisa dos 2 arquivos já prontos antes de rodar...
eu queria que ele verificasse se esses arquivos existem e caso contrário criá-los
eu sei que tem a função rewrite mas eu não quero que ele apage o arquivo caso ele já exista...
galera caso eu tenha cometido alguma gafe nesse codigo me falem (eu estou aprendendo ainda) :roll:
PS. vcs sabiam que o numero 108276907 é primo?