Pagini recente » Cod sursa (job #2684915) | Cod sursa (job #651214) | Cod sursa (job #571282)
Cod sursa(job #571282)
const f='sumdiv2.in';g='sumdiv2.out';
//program ssnd1 ;
MAX = 1000005 ;
//MDD = 9973 ;
var
P : array [ 0 .. MAX ] of longint ;
maxb, a1, T,i1, j1, b1 : longint ;
V : array [ 0.. 1 shl 17 ] of byte ;
sum, suma, N : int64 ;
A : array[ 0 .. max ] of longint;
b : array[ 1..max,1..2] of longint;
procedure prec ;
var
i, j : longint ;
begin
inc ( P[0] ) ; P[ P[0] ] := 2 ;
i := 1 ;
while ( i * i shl 1 ) + ( i shl 1 ) <= MAX do
begin
if ( V[i shr 3] and ( 1 shl ( i and 7 ) ) ) = 0 then
begin
j := ( i * i shl 1 ) + ( i shl 1 ) ;
while ( j shl 1 ) + 1 <= MAX do
begin
V[j shr 3] := V[j shr 3] or ( 1 shl ( j and 7 ) ) ;
inc ( j, ( i shl 1 ) + 1 ) ;
end ;
end ;
inc ( i ) ;
end ;
i := 1 ;
while ( i shl 1 ) + 1 <= MAX do
begin
if ( V[i shr 3] and ( 1 shl ( i and 7 ) ) ) = 0 then
begin
inc ( P[0] ) ;
P[ P[0] ] := ( i shl 1 ) + 1 ;
end ;
inc ( i ) ;
end ;
end ;
function pow ( N : longint ; P : longint ) : longint ;
var
i, sol : longint ;
begin
sol := 1 ;{ N := N mod MDD}; i := 0 ;
while ( 1 shl i ) <= P do
begin
if ( ( 1 shl i ) and P ) > 0 then
begin
sol := sol * N ;
//sol := sol mod MDD ;
end ;
N := N * N ; //N := N mod MDD ;
inc ( i ) ;
end ;
pow := sol ;
end ;
procedure ssnd(N : longint ) ;
var
i, nr, pp : longint ;
begin
//readln ( N ) ;
nr := 1 ; sum := 1 ; i := 1 ;
while ( int64 ( P[i] ) * int64 ( P[i] ) <= N ) and ( i <= P[0] ) do
begin
if ( N mod P[i] = 0 ) then
begin
pp := 0 ;
while ( N mod P[i] ) = 0 do
begin
inc ( pp ) ;
N := N div P[i] ;
end ;
nr := nr * ( pp + 1 ) ;
sum := sum * ( pow ( P[i], pp + 1 ) - 1 );// sum := sum mod MDD ;
sum := sum * ( pow ( P[i] - 1, 1 ) );// sum := sum mod MDD ;
end ;
inc ( i ) ;
end ;
if ( N > 1 ) then
begin
nr := nr shl 1 ;
sum := sum * ( ( N + 1 ) {mod mdd} ); //sum := sum mod MDD ;
end ;
//writeln ( nr, ' ', sum ) ;
end ;
begin
assign ( input, f) ; reset ( input ) ;
assign ( output, g ) ; rewrite ( output ) ;
prec ; readln ( T ) ;
for i1 := 1 to t do
begin
readln(a1,b1);
b[i1,1]:=a1;
b[i1,2]:=b1;
if b1 > maxb then maxb:=b1;
end;
for i1 := 1 to maxb do
begin
ssnd(i1);
A[I1] := sum;
end;
for i1 := 1 to t do
begin
suma:=0;
for j1 := b[i1,1] to b[i1,2] do
suma := suma + a[j1];
writeln(suma );
end;
for i1 := 1 to maxb do write(a[i1],' ');
//write(')');
{for i1 := 1 to t do
begin
suma := 0;
readln(a,b);
for j1 := a to b do
begin
ssnd( j1 );
suma := sum + suma;
end;
writeln( suma );
end;
}
{ while ( T > 0 ) do
begin
ssnd ;
dec ( T ) ;
end ;
}
close ( input ) ; close ( output ) ;
end .