0

コーディングと効率を改善するために小さなタスクに取り組んでいます。今日取り組んでいる問題は、プロジェクト Euler の問題 3 からのものです。

「600851475143 の最大の素数を見つける」

私が書いたコードは次のとおりです。

data test;

a = 600851475143;
/*The subsequent a's are the next parts of the loop I'm trying to incorporate*/
/*a = 8462696833;*/
/*a = 10086647;*/
/*a = 6857;*/

if mod(a,2) = 0 then do;

a = a / 2;

end;

else do;

    do i = 3 to a until(flag);

        if mod(a,i) = 0 and i < a then do;

            b = i ;
            a = a / b ;
            flag = 1;
            output;

        end;
    end;

end;

run;

変数をループにして小さくし、a がなくなったら終了するにはどうすればよいですか。つまり、因数分解がないため、最後の反復でデータセットが生成されません。

また、このコードをより効率的にする方法についてのヒントを喜んで受け取ります。

4

1 に答える 1