タイトルだけで説明するのは難しいのですが、基本的にはある数Nを入力し、2つの数(1とNを除く)を掛け合わせてNに限りなく近づける(下ではなく上に)というシステムを作りました。 )。
いくつかの例を次に示します。
- 25 → 5 & 5.
- 40 → 5 & 8.
- 53 → 6 & 9.
- 13 → 2 & 7.
X sans 1 と X のすべての因数のリストを返すメソッドFactor
があります。このコードも大きな数を扱う必要がないため、素数のリストに含まれているかどうかをチェックして素数性をテストします。
それを行うコードは次のとおりです。
if (primes.Contains(N))
N++;
List<int> facts = Factor(N);
double root = Math.Sqrt(N);
int cl1;
int cl2;
if (root == (int)root)
{
cl1 = (int)root;
cl2 = (int)root;
}
else if (N == 2)
{
cl1 = 1;
cl2 = 2;
}
else
{
cl1 = facts.Aggregate((x, y) => Math.Abs(x - root) < Math.Abs(y - root) ? x : y);
facts.Remove(cl1);
cl2 = facts.Aggregate((x, y) => Math.Abs(x - root) < Math.Abs(y - root) ? x : y);
}
これを一般化して、3 つ、または 4 つ、5 つ、または 9 つの出力が得られるようにするには、どのような方法がよいでしょうか? (明らかに、私は配列とスワップアウトcl1
しcl2
ますが、コード的に意味します)