JZOJ 1845——约数

这里写图片描述


先将1~n所有非素数除1外的最小公因数求出来
最后循环求出加上每一个i的除1外的最小公约数,如果为0,则加本身


代码如下:

var
  n,i,j:longint;
  ans:int64;
  w:array[2..10000000] of longint;

begin
  readln(n);
  for i:=2 to trunc(sqrt(n)) do
    if w[i]=0 then for j:=1 to n div i do if w[i*j]=0 then w[i*j]:=i;
  for i:=2 to n do if w[i]>0 then ans:=ans+w[i] else ans:=ans+i;
  writeln(ans);
end.
posted @ 2017-06-05 20:30  BEYang_Z  阅读(177)  评论(0编辑  收藏  举报