SQL で3倍完全数(ダブル完全数)
ダブル完全数 どう書く?org
「完全数」とは、自分以外の約数の和が自分自身と等しいような整数のことです。 (完全数 - Wikipedia)。

ここで「自分以外の約数の和が自分自身の2倍と等しいような整数」を「ダブル完全数」と呼ぶことにします。10000以下のダブル完全数をすべて求めるコードを書いてください。


実装非依存のはず。MySQL で確認してあります。

Drop TABLE digits;
CREATE TABLE digits(n INTEGER);
INSERT INTO digits VALUES(0);
INSERT INTO digits VALUES(1);
INSERT INTO digits VALUES(2);
INSERT INTO digits VALUES(3);
INSERT INTO digits VALUES(4);
INSERT INTO digits VALUES(5);
INSERT INTO digits VALUES(6);
INSERT INTO digits VALUES(7);
INSERT INTO digits VALUES(8);
INSERT INTO digits VALUES(9);

Drop TABLE numbers;
CREATE TABLE numbers AS
SELECT a.n + (b.n * 10) + (c.n * 100) + (d.n * 1000) + 1 AS n
FROM digits a, digits b, digits c, digits d;

SELECT a_n
FROM (SELECT a.n AS a_n, b.n AS b_n
FROM numbers a, numbers b
WHERE b.n <= a.n / 2 ) nums
WHERE MOD(a_n, b_n) = 0
GROUP BY a_n
HAVING a_n * 2 = SUM(b_n);


実行結果
+------+
| a_n |
+------+
| 120 |
| 672 |
+------+
2 rows in set (2 min 46.91 sec)

処理に結構な時間がかかってしまうなぁ
[PR]
by fkmn | 2007-07-20 23:06 | IT
<< 【感想】リクルートのDNA—起... 【感想】コピー用紙の裏は使うな! >>


とあるWebアプリケーションエンジニアの日記
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
カテゴリ
以前の記事
ブログパーツ
リンク
検索
タグ
最新のトラックバック
プログラミングが「出来る..
from とりあえず9JP?
Genographic ..
from ナンジャモンジャ
ジュセリーノ
from ありの出来事
くちこみブログ集(ライフ..
from くちこみブログ集(ライフ)(..
以降、丁寧語で行こう!
from エッセイ的な何か
人気ジャンル
ファン
記事ランキング
ブログジャンル
画像一覧

fkmnの最近読んだ本 フィードメーター - フッ君の日常 あわせて読みたい AX