bzoj2749

时间:2021-09-29 05:02:08

根绝欧拉函数的计算式,欧拉函数次方每次就是不断把2消掉,并把其他质因子不断变出2,最终弄成1
显然我们先预处理每个数会被弄出多少个2出来,次方=弄出来的2的总数-[一开始是否有2]
(因为一开始没2的话是要先次方一下,无法消掉1个2)

 var p,w:array[..] of longint;
f:array[..] of boolean;
t,i,j,n,x,y:longint;
ans:int64;
ch:boolean; begin
w[]:=;
for i:= to do
begin
if w[i]= then
begin
inc(t);
p[t]:=i;
w[i]:=w[i-];
end;
for j:= to t do
begin
if i*p[j]> then break;
w[i*p[j]]:=w[i]+w[p[j]];
if i mod p[j]= then break;
end;
end;
readln(t);
while t> do
begin
dec(t);
readln(n);
ans:=;
for i:= to n do
begin
readln(x,y);
if x= then dec(ans);
ans:=ans+int64(w[x])*int64(y);
end;
writeln(ans);
end;
end.