解题报告 hdu3501

题意:求一个数的自然数到它前一个数的和与比它小的数中所有与它互质的数的和的差。。。。

比它小的与它互质的和:n*f[n] / 2 

f[n] 为 n 的欧拉函数,怎么求见上一篇。

多组数据,输出对一个大数取模。

//hdu 3050
program ACRush;
const mm=1000000007;
var
v:array[0..100010]of boolean;
i,j,k:longint;
ans0,n,ans:int64;
begin
for i:=2 to 100010 do
if not v[i] then
begin
j:=i;
while j+i<=100010 do
begin
j:=j+i;
v[j]:=true;
end;
end;

while not eof do
begin
readln(n);
if n=0 then break;
if n=1 then
begin
writeln(0);
continue;
end;
ans:=n;
k:=n;
for i:=2 to trunc(sqrt(k))+2 do
if not v[i] then
if n mod i=0 then
begin
ans:=ans div i;
ans:=ans*(i-1);
while n mod i=0 do n:=n div i;
end;
if n>1 then ans:=(ans div n)*(n-1);
n:=k;
ans0:=n*(n-1) div 2 - n*ans div 2;
writeln(ans0 mod mm);
end;
end.

 

posted @ 2012-05-16 18:07  木小漾  阅读(263)  评论(0编辑  收藏  举报