Я бы использовал две переменные. Вам придется использовать деление и по модулю
begin
и, возможно, step
(в зависимости от того, насколько большим может быть step
), до
вход в цикл, но они не должны быть необходимы в цикле. Если
step
меньше и делитель ni
, то следующее должно сделать
хитрость:
int end = ni;
int i = begin % ni;
int firstJ = begin / ni;
int j = firstJ;
while ( i < ni ) {
// ...
j += step;
if ( j >= nj ) {
++ i;
j = firstJ;
}
}
Если step
не кратно nj - firstJ
, вам придется сделать
кое-что об обработке остальных, когда j >= nj
.
Я предполагаю, что i
и j
используются для индексации данных. В зависимости от
как данные структурированы, может быть проще добавить begin
в
это заранее (если у вас есть указатель), или для повторения игнорируя begin
,
добавив begin
при каждом доступе. (Если вы делаете это, не забудьте исправить
ni
и nj
соответственно.)