プログラムの一部入力番号が完全な数であるかどうかをチェックします。私たちは、O(sqrt(n))で実行される解を見つけるはずです。残りのプログラムは一定の時間内に実行されますが、この機能は私を後押ししています。O(sqrt(n))に完全な数値チェックを最適化する
function Perfect(x: integer): boolean;
var
i: integer;
sum: integer=0;
begin
for i := 1 to x-1 do
if (x mod i = 0) then
sum := sum + i;
if sum = x then
exit(true)
else
exit(false);
end;
これはO(n)時間で実行され、これをO(sqrt(n))時間に減らす必要があります。 (2)検索...
(1)ループ(x)はSQRTに1から行くために作るための方法を見つける
:
これらは私が作ってみたのオプションがありますforループを使用しない完全な数をチェックする方法...
何か提案がありますか?ヒント、ヒント、指導などに感謝します:)
:
だから私たちは、次のコードを取得範囲。単純にそれらを定数配列に入れます。 –
前のコメントは完全に深刻ではありませんでしたが、確かにあなたは正しいです:1..sqrt(n)で分ける必要があります。残りの部分は鏡映せます。 –
割り当てルールに入力が整数でなければならないということは何もありませんが、試してみます。ありがとうございました。 – Reccho