static void Main(string[] args)
 {
     FactorsGenerator fg = new FactorsGenerator();
     PrimeGenerator pg = new PrimeGenerator();
     Queue<long> consecutives = new Queue<long>();
     for (long num = 1000; ; num++)
     {
         List<long> factors = fg.GeneratorDistinctFactors(num);
         if (factors.Count != 4)
             continue;
         bool allprime = true;
         foreach (long factor in factors)
         {
             if (pg.CheckPrime((int)factor))
                 continue;
             allprime = false;
             break;
         }
         if (!allprime)
             continue;
         consecutives.Enqueue(num);
         if (CheckConsecutive(consecutives,4))
             break;
         if (consecutives.Count == 4)
             consecutives.Dequeue();
     }
     Console.WriteLine(string.Format("Result is {0}", consecutives.Peek()));
 }
 /// <summary>
 /// 由于除数数量很少,没有逐个判断是否是prime
 /// </summary>
 /// <param name="args"></param>
 static void Main(string[] args)
 {
     FactorsGenerator generator = new FactorsGenerator();
     List<long> factors = generator.GeneratorDistinctFactors(600851475143);
     foreach (long factor in factors)
     {
         Console.Write(factor + ",");
     }
     Console.ReadLine();
 }
 static void Main(string[] args)
 {            
     Stopwatch sw = new Stopwatch();
     sw.Start();
     FactorsGenerator fg = new FactorsGenerator();
     float min = 1f/3;
     float max = 1f / 2;
     FactMatrix = new int[MAXNUM + 1][];
     for(int i = 0; i <= MAXNUM; i ++){
         FactMatrix[i] = fg.GeneratorDistinctFactors(i).ToArray();
     };
     sw.Stop();
     Console.WriteLine("init base data time used {0}m{1}s{2}ms", sw.Elapsed.Minutes, sw.Elapsed.Seconds, sw.Elapsed.Milliseconds);
     sw.Restart();
     int result = 0;
     for (int i = MAXNUM; i >= 2; i--)
     {
         // 计算小于此i数字所有的互质数
         for (int j = 1; j < i; j++)
         {
             // 检查是不是互质数
             if (!IsReltavePrime(i, j))
             {
                 continue;
             }
             float val = (float)j / i;
             if (val <= min)
                 continue;
             if (val >= max)
                 continue;
             result++;
         }
         // 统计在1/3 和 1/2的数字
     }
     sw.Stop();
     Console.WriteLine("result is {0}, time used {1}m{2}s{3}ms",result,sw.Elapsed.Minutes,sw.Elapsed.Seconds,sw.Elapsed.Milliseconds);
 }