トップページに戻る    次のProblemへ    前のProblemへ

Problem10 200万以下の全ての素数の和

10以下の素数の和は2 + 3 + 5 + 7 = 17である.
200万以下の全ての素数の和を計算しなさい.


SQL

declare
    type NumArrDef is table of pls_Integer Index by binary_integer;
    NumArr NumArrDef;

    --MaxNum constant pls_Integer := 10;
    MaxNum constant pls_Integer := 2000000;

    J pls_Integer;
    SumVal Number(38):=0;
begin
    for I in 2..MaxNum Loop
        NumArr(I) := I;
    end Loop;

    for I in 2..MaxNum Loop
        if NumArr(I) != 0 then
            J := I*2;
            while (J <= MaxNum) Loop
                NumArr(J) := 0;
                J := J+I;
            end Loop;
        end if;
    end Loop;

    for I in 2..MaxNum Loop
        if NumArr(I) != 0 then
            SumVal := SumVal + I;
        end if;
    end Loop;
    DBMS_Output.Put_Line('Answer=' || to_char(SumVal));
end;
/


実行結果

Answer=142913828922


解説

エラトステネスのふるいを使ってます。

C#での解