
先将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.

本文介绍了一种算法,用于计算从1到n的所有非素数(除去1)的最小公因数之和。通过筛选法找出每个数的最小质因数,并以此为基础,计算出所有符合条件的数的最小公因数总和。
814

被折叠的 条评论
为什么被折叠?



