.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Linq;
using System.Collections.Generic;

public class Program
{
	public static void Main()
	{
		Test(100, 2, new [] { Range(0, 49), Range(50, 100) });
		Test(100, 3, new [] { Range(0, 32), Range(33, 65), Range(66, 100) });
		Test(101, 3, new [] { Range(0, 32), Range(33, 65), Range(66, 101) });
		Test(2, 3, new [] { Range(0, 2) });
		Test(0, 3, new Tuple<int, int>[] { });
	}
	
	public static void Test(int length, int chunkCount, IEnumerable<Tuple<int, int>> expected)
	{
		var result = Split2(length, chunkCount);
		if (!expected.SequenceEqual(result))
		{
			Console.WriteLine($@"
length={length}, chunkCount={chunkCount}
Expected: [{String.Join(", ", expected)}] 
Got: [{String.Join(", ", result)}
");
		}
	}
	
	public static Tuple<int, int> Range(int it1, int it2)
	{
		return new Tuple<int, int>(it1, it2);
	}

	public static IEnumerable<Tuple<int, int>> Split2(int length, int chunkCount)
	{
		int chunkSize = length / chunkCount;
		for (int i = 0; i < chunkCount; i++)
		{
			int startPos = chunkSize * i;
			int endPos = i == chunkCount - 1 ? length : (startPos + chunkSize - 1);
			yield return new Tuple<int, int>(startPos, endPos);
		}
	}
}
;