Как пропустить индекс в цикле, который я получаю во время цикла - PullRequest
0 голосов
/ 18 октября 2018

Пример: я проверяю некоторые числа от 1 до 1000 в цикле for.

Возможно, число 50 является допустимым числом, поэтому все числа, кратные 50, можно пропустить (100, 150, 200, 250, ...) потому что они также действительны.

Так что мне не нужно проверять эти числа еще раз, чтобы повысить производительность и сократить циклические процессы с 1000 до, может быть, всего 60.

Есть ли способ сделать это?

Поскольку вы запросили механизм «проверки»:

Я хочу проверить «дружные» номера,Это часть «Проектной проблемы Эйлера 21».Я просто хочу улучшить свое решение.

Дружественными числами являются, например, 220 и 284, потому что сумма его собственных делителей обоих чисел равна числу самих себя.

Делители 220: 1, 2,4, 5, 10, 11, 20, 22, 44, 55 и 110 => сумма 284

Делители на 284: 1, 2, 4, 71 и 142 => сумма 220

Так что оба числа являются «дружными» числами.Если я проверяю 220 с 284, мне не нужно снова проверять 284. Я мог бы пропустить его.

List<int> ListOfAmicableNumbers = new List<int>();


for (int i = 1; i <= 1000; i++)
{
    if(IsAmicableNumber(i))
    {
        ListOfAmicableNumbers.Add(i);
    }
}

Возможно, существует разумный математический способ пропустить эти значения.Потому что цикл по списку, который становится все больше и больше за каждую итерацию, возможно, 1 миллион итераций, может снова замедлить его.

1 Ответ

0 голосов
/ 18 октября 2018
int skipValue=50;
for(int i=1; i<=1000;i++)
{
   if(i%skipValue == 0) continue;
   //verification goes here...
}

Редактировать: поскольку вы говорите, что вам может потребоваться более одного значения skipValue, и этот список значений skipValue постепенно увеличивается, попробуйте выполнить следующее:

List<int> skipValues = new List<int>();//fill them somewhere else...
for(int i=1; i<=1000;i++)
{
   if(skipValues.Any(w => i%w == 0)) continue;
   //verification goes here...
   //after verification you may like to add this value into the list:
   skipValues.Add(i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...