因此,我必须对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);行)