对大量数字进行推理因子分解

时间:2017-02-05 18:40:17

标签: c++ prime-factoring

因此,我必须对1到8 * 10 ^ 6的最多10 ^ 6个不同数字进行素数分解。我用Erathostenes的Sieve完成了这个,但似乎它太慢了。我不知道如何处理它。这是我的代码:

int factors[8000001] = { };

void sieve(int* tab, int max)
{
    for (int i = 2; i * i < max; ++i)
    {
        if(tab[i] == 0)
        {
            for (int j = i; j * i < max; ++j)
            {
                if (tab[i*j] > i || tab[i*j] == 0) 
                    tab[i*j] = i;
            }
        }
    }
}

在main()中:

cin >> number;

while (number > 1)
{
if (factors[number] == 0)
    {
      cout << number;
      number = 1;
    }
    else if (number != factors[number])
        cout << factors[number] << "*";
    else
        cout << factors[number];
    number /= factors[number];
}
cout << "\n";

对于较小的测试,它可以很好地工作,但不适用于大型测试。我能改进什么? (我也使用ios_base :: sync_with_stdio(0);行)

0 个答案:

没有答案