Pagini recente » Cod sursa (job #1831028) | Cod sursa (job #625940) | Cod sursa (job #1981807) | Cod sursa (job #1626286) | Cod sursa (job #58445)
Cod sursa(job #58445)
var nrdiv,n,d,ct,j,aux1,aux2,ki:int64;
i:longint;
fi,fo:text;
a:array[1..5000000]of record prim,doi:longint; end;
function prim(a:byte):boolean;
var i:byte;
begin
prim:=true;
for i:=2 to trunc(sqrt(a)) do
if a mod i=0 then begin prim:=false; break; end;
end;
procedure calc1(n,p:int64);
var i:longint;
begin
a[p].prim:=1; nrdiv:=0;
for i:=1 to p-1 do a[i].prim:=0;
ki:=p+1;
while ki<=n do
begin
j:=ki;
while j mod p =0 do
begin
inc(nrdiv);
j:=j div p;
end;
a[ki].prim:=a[ki-1].prim+nrdiv;
nrdiv:=0;
inc(ki);
end;
end;
procedure calc2(n,p:int64);
var i:longint;
begin
a[p].doi:=1; nrdiv:=0;
for i:=1 to p-1 do a[i].doi:=0;
ki:=p+1;
while ki<=n do
begin
j:=ki;
while j mod p =0 do
begin
inc(nrdiv);
j:=j div p;
end;
a[ki].doi:=a[ki-1].doi+nrdiv;
nrdiv:=0;
inc(ki);
end;
end;
begin
assign(fi,'pascal.in'); reset(fi);
assign(fo,'pascal.out'); rewrite(fo);
read(fi,n,d);
if prim(d) then
begin
aux1:=d;
calc1(n,aux1);
if n mod 2=0 then
begin
for i:=1 to (n-1)div 2 + 1 do
if a[n].prim-a[n-i].prim-a[i].prim>0 then inc(ct);
if a[n].prim-a[n-((n-1)div 2 + 1)].prim-a[(n-1)div 2 + 1].prim>0 then ct:=ct*2-1
else ct:=ct*2;
end
else begin
for i:=1 to (n-1)div 2 do
if a[n].prim-a[n-i].prim-a[i].prim>0 then inc(ct);
ct:=ct*2; end;
end
else begin aux1:=2; aux2:=d div aux1;
if aux1=aux2 then
begin
calc1(n,aux1);
if n mod 2=0 then
begin
for i:=1 to (n-1)div 2 + 1 do
if a[n].prim-a[n-i].prim-a[i].prim>1 then inc(ct);
if a[n].prim-a[n-((n-1)div 2 + 1)].prim-a[(n-1)div 2 + 1].prim>1 then ct:=ct*2-1
else ct:=ct*2;
end
else begin
for i:=1 to (n-1)div 2 do
if a[n].prim-a[n-i].prim-a[i].prim>1 then inc(ct);
ct:=ct*2; end;
end
else
begin
calc1(n,aux1);
calc2(n,aux2);
if n mod 2=0 then
begin
for i:=1 to (n-1)div 2 + 1 do
if (a[n].prim-a[n-i].prim-a[i].prim>0)and(a[n].doi-a[n-i].doi-a[i].doi>0) then inc(ct);
if (a[n].prim-a[n-((n-1)div 2 + 1)].prim-a[(n-1)div 2 + 1].prim>0)and(a[n].doi-a[n-((n-1)div 2 + 1)].doi-a[(n-1)div 2 + 1].doi>0) then ct:=ct*2-1
else ct:=ct*2;
end
else begin
for i:=1 to (n-1)div 2 do
if (a[n].prim-a[n-i].prim-a[i].prim>0)and(a[n].doi-a[n-i].doi-a[i].doi>0) then inc(ct);
ct:=ct*2; end;
end;
end;
writeln(fo,ct);
close(fi);
close(fo);
end.