У меня есть список основных факторов числа в следующей форме:
int [] factor = {количество факторов, factor1, poweroffactor1, factor2, poweroffactor2, ...};
Я хочу получить эквивалент динамически вложенных циклов for, который даст все факторы, где циклы for будут выглядеть примерно так:
int currentpod = 1;
for(int i=0;i<factors[2];i++)
{
currentprod *= Math.Pow(factors[1],i);
for(int j=0;j<factors[4];j++)
{
currentprod *= Math.Pow(factors[3],i);
...
//When it hits the last level (i.e. the last prime in the list, it writes it to a list of divisors
for(int k=0;k<factors[6];k++)
{
divisors.Add(Math.Pow(factors[5],k)*currentprod);
}
}
}
К сожалению, этот код взрывается, так как currentprod не получает достаточный сброс.
Вот фактический код, который я использую, чтобы попытаться выполнить это:
public static List<int> createdivisorlist(int level, List<int> factors, int[] prodsofar,List<int> listsofar)
{
if (level == factors[0])
{
prodsofar[0] = 1;
}
if (level > 1)
{
for (int i = 0; i <= 2*(factors[0]-level)+1; i++)
{
prodsofar[level-1] = prodsofar[level] * (int)Math.Pow(factors[2 * (factors[0] - level) + 1], i);
listsofar = createdivisorlist(level - 1, factors, prodsofar, listsofar);
}
}
else
{
for (int i = 0; i <= factors.Last(); i++)
{
listsofar.Add(prodsofar[level] * (int)Math.Pow(factors[2 * (factors[0] - level) + 1], i));
if (listsofar.Last() < 0)
{
int p = 0;
}
}
return listsofar;
}
return listsofar;
}
исходные аргументы:
уровень = факторы [0]
factor = список основных факторов в указанном выше формате
prodsofar [] = все элементы равны 1
listsofar = пустой список
Как я могу сбросить prodsofar, чтобы он не "взорвался" и вместо этого просто сделал то, что я обрисовал в общих чертах?
Примечание: в качестве теста используйте 2310, так как согласно текущему коду добавляемый делитель является отрицательным (переполнение int).