valueを長さ lengthのnewBase番号に変換するメソッドがあります。
英語のロジックは次のとおりです。
If we calculated every possible combination of numbers from 0 to (c-1)
with a length of x
what set would occur at point i
以下の方法は完全に機能しますが、非常に大きな数が使用されるため、完了するまでに長い時間がかかる場合があります。
たとえば、value=(((65536^480000)-1)/2), newbase=(65536), length=(480000) は、64 ビット アーキテクチャのクアッド コア PC で完了するのに約 1 時間かかります)。
private int[] GetValues(BigInteger value, int newBase, int length)
{
Stack<int> result = new Stack<int>();
while (value > 0)
{
result.Push((int)(value % newBase));
if (value < newBase)
value = 0;
else
value = value / newBase;
}
for (var i = result.Count; i < length; i++)
{
result.Push(0);
}
return result.ToArray();
}
私の質問は、このメソッドを複数のスレッドが数値の一部を処理できるように変更するにはどうすればよいですか?
私は C# で作業していますが、それに慣れていない場合は、疑似コードでも問題ありません。
注: メソッドはこの質問からのものです:ほとんど 0 のセットを返すデカルト積サブセット