program bzoj_2301; const maxn=50000; var prime:array[1..maxn]of boolean; sieve,mu:array[0..maxn]of longint; n,i,a,b,c,d,k,tot:longint;
functionmin(a,b:longint):longint; begin if a<b thenexit(a) elseexit(b); end;
procedureinit_mu; var i,j:longint; begin fillchar(prime,sizeof(prime),true); tot:=0; mu[1]:=1; for i:=2to maxn do begin if prime[i] then begin inc(tot); sieve[tot]:=i; mu[i]:=-1; end; for j:=1to tot do begin if i*sieve[j]>maxn thenbreak; prime[i*sieve[j]]:=false; if i mod sieve[j]=0then begin mu[i*sieve[j]]:=0; break; endelse mu[i*sieve[j]]:=-mu[i]; end; end; for i:=2to maxn do inc(mu[i],mu[i-1]); end;
functionsolve(a,b:longint):int64; var d,i,j:longint; begin a:=a div k; b:=b div k; d:=min(a,b); solve:=0; i:=1; while i<=d do begin j:=min(a div(a div i),b div(b div i)); inc(solve,(mu[j]-mu[i-1])*int64(a div i)*int64(b div i)); i:=j+1; end; end;
begin readln(n); init_mu; for i:=1to n do begin readln(a,b,c,d,k); writeln(solve(b,d)+solve(a-1,c-1)-solve(b,c-1)-solve(a-1,d)); end; end.