如何用C#判断质数和合数,并在窗体中显示合数的所有约数

解决方案 »

  1.   

    刷子法
    long vTickCount = Environment.TickCount;
    const uint cMaxNumber = 1000000;
    bool[] vFlags = new bool[cMaxNumber]; // 都会初始为
    uint[] vReturns = new uint[cMaxNumber / 2]; // 返回值
    vReturns[0] = 2;
    int vCount = 1;
    for (uint i = 3; i < cMaxNumber; i += 2)
    {
        if (!vFlags[i]) // 可以处理
        {
            vReturns[vCount++] = i;
            for (uint j = i; j < cMaxNumber; j += i)
                vFlags[j] = true; // 处理过了
        }
    }
    Console.WriteLine("返回{0}个结果, 耗时{1}毫秒", vCount, 
        Environment.TickCount - vTickCount);
    //for (int i = 0; i < vCount; i++) // 输出的代码大家耗的时间都一样,不用计算
    //    Console.Write("{0,10}", vReturns[i]);
    Console.Read();