3

タイトルだけで説明するのは難しいのですが、基本的にはある数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 つの出力が得られるようにするには、どのような方法がよいでしょうか? (明らかに、私は配列とスワップアウトcl1cl2ますが、コード的に意味します)

4

1 に答える 1