将数字区间拆分为 X 个更小的区间
Split number interval into X smaller intervals
我正在开发一个计算给定时间间隔内素数的客户端-服务器应用程序。客户端已完成,但我被服务器卡住了。我正在寻找将给定间隔分成 X(连接的客户端数量)较小间隔的算法。 (例如 2 - 50 和 5 个客户将分成 2-10 11-20 21-30 31-40 41-50)
有人可以帮我找到可用的算法吗?谢谢。
找到此代码,但不适用于大数字
private static string[] divide(ulong min, ulong max, ulong parts)
{
if (min > max) return null;
List<string> list = new List<string>();
ulong chunksize = max / parts;
ulong chunkstart = min;
ulong chunkend = chunkstart + chunksize - 1;
while(chunkstart < max)
{
if(chunkend > max)
{
list.Add(string.Format("{0}:{1}", chunkstart, max));
break;
}
list.Add(string.Format("{0}:{1}", chunkstart, chunkend));
chunkstart += chunksize;
chunkend += chunksize;
}
return list.ToArray();
}
试一试。检查参数 "parts" 的值是否用于划分间隔的长度,而不是像您所做的那样划分最大值。而这段代码也把余数占了,一一分配给最开始的区间。这就是为什么对于您的输入 (min:2, max:50, parts:5),它会给出输出
2:12
12:22
22:32
32:41
41:50
using System.IO;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var x = Divide(2, 50, 5);
foreach(var y in x) Console.WriteLine("{0}:{1}", y.Item1, y.Item2);
}
private static List<Tuple<ulong, ulong>> Divide(ulong min, ulong max, ulong parts)
{
ulong stepSize = (max - min) / parts;
if (stepSize <= 0) return null;
ulong mod = (max - min) % parts;
var result = new List<Tuple<ulong, ulong>>();
ulong begin = min;
ulong end;
for (ulong i = 0; i < parts; i++)
{
end = begin + stepSize;
if (mod > 0)
{
mod--;
end += 1;
}
var t = new Tuple<ulong, ulong>(begin, end);
result.Add(t);
begin = end;
}
return result;
}
}
我正在开发一个计算给定时间间隔内素数的客户端-服务器应用程序。客户端已完成,但我被服务器卡住了。我正在寻找将给定间隔分成 X(连接的客户端数量)较小间隔的算法。 (例如 2 - 50 和 5 个客户将分成 2-10 11-20 21-30 31-40 41-50) 有人可以帮我找到可用的算法吗?谢谢。
找到此代码,但不适用于大数字
private static string[] divide(ulong min, ulong max, ulong parts)
{
if (min > max) return null;
List<string> list = new List<string>();
ulong chunksize = max / parts;
ulong chunkstart = min;
ulong chunkend = chunkstart + chunksize - 1;
while(chunkstart < max)
{
if(chunkend > max)
{
list.Add(string.Format("{0}:{1}", chunkstart, max));
break;
}
list.Add(string.Format("{0}:{1}", chunkstart, chunkend));
chunkstart += chunksize;
chunkend += chunksize;
}
return list.ToArray();
}
试一试。检查参数 "parts" 的值是否用于划分间隔的长度,而不是像您所做的那样划分最大值。而这段代码也把余数占了,一一分配给最开始的区间。这就是为什么对于您的输入 (min:2, max:50, parts:5),它会给出输出
2:12
12:22
22:32
32:41
41:50
using System.IO;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var x = Divide(2, 50, 5);
foreach(var y in x) Console.WriteLine("{0}:{1}", y.Item1, y.Item2);
}
private static List<Tuple<ulong, ulong>> Divide(ulong min, ulong max, ulong parts)
{
ulong stepSize = (max - min) / parts;
if (stepSize <= 0) return null;
ulong mod = (max - min) % parts;
var result = new List<Tuple<ulong, ulong>>();
ulong begin = min;
ulong end;
for (ulong i = 0; i < parts; i++)
{
end = begin + stepSize;
if (mod > 0)
{
mod--;
end += 1;
}
var t = new Tuple<ulong, ulong>(begin, end);
result.Add(t);
begin = end;
}
return result;
}
}