2017-03-10 8 views
0

私は、指定された間隔で素数を計算するクライアント/サーバーアプリケーションで作業しています。クライアントは終了しましたが、私はサーバーに固執しています。私は、X(接続されたクライアントの数)の小さなものに与えられた間隔を分割するアルゴリズムを探しています。 (例えば、5人のクライアントが2人〜50人が2人に分かれています11-20 21-30 31-40 41-50) 使用可能なアルゴリズムを見つけるのに助けてくれる人がいますか?ありがとう。数字の間隔をX個の小さな間隔に分割する

は、このコードを見つけましたが、多数の

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(); 
    } 
+0

書き込みを開始したコードを入力してください。また、いくつかの取り決め(データ)が参考になります。 – kat1330

+0

編集されたメインポスト – Nicer

答えて

0

のために動作しません。この打撃を与えます。引数 "parts"の値が区間の長さを分割するのに使用され、最大値ではないことを確認してください。そして、このコードは余りを考慮に入れて、それを先頭の区間に1つずつ分配します。 (:2、最大:50、部品は: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; 
    } 

} 
+0

うまくいくようです。ありがとうございました :) – Nicer