jzoj P1845【汕头市选2014】约数

这里写图片描述

题解:
我们发现,这题有一点点规律我们可以用塞素数的方法做。
按顺序,每次把没被塞掉的i的倍数全部塞出来(包括i),并且有多少个就加上多少个i,因为这时i是除了1以外他们的最小约数。最后如果全部数都被塞完了,就不用做下去了。注意若i的某个倍数,之前已经被塞出去了,就不用累加i。

var
   a:array [0..10000001] of boolean;
   n,p,i,j:longint;
   sum:int64;
begin
   assign(input,'divisor.in'); reset(input);
   assign(output,'divisor.out'); rewrite(output);
   readln(n);
   p:=n-1; sum:=0;
   fillchar(a,sizeof(a),true);
   i:=1;
   while p>0 do
   begin
       inc(i);
       if a[i] then
       begin
            for j:=1 to n div i do
            if a[i*j] then
            begin
                  a[i*j]:=false;
                  dec(p);
                  sum:=sum+i;
            end;
       end;
   end;
   writeln(sum);
   close(input); close(output);
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值