x, y ∈ N であるすべてのペア (x,y) のリストを返す関数を作成する必要があります。
- x は 2 つの自然数の積 (x = a • b、ここで a, b ∈ N)であり、
- x は 5 より大きいが 500より小さい
- y は平方数 (y = c² ここで c ∈ N) であり、1000 以下であり、かつ
- x は y の約数です。
私の試み:
listPairs :: [(Int, Int)]
listPairs = [(a*b, y) | y <- [0..], a <- [0..], b <- [0..],
(a*b) > 5, (a*b) < 500, (y*y) < 1001,
mod y (a*b) == 0]
しかし、それは何も返さず、コンピューターはそれに対して多くの作業を行います。
ただし、たとえば の範囲を小さくするa
と、b
最大1 分かかりますが、正しい結果が返されます。y
[0..400]
では、どうすればパフォーマンスの問題を解決できますか?