Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 大量数的素因子分解_C++_Prime Factoring - Fatal编程技术网

C++ 大量数的素因子分解

C++ 大量数的素因子分解,c++,prime-factoring,C++,Prime Factoring,所以我必须对从1到8*10^6的10^6个不同的数字进行素数分解。我用埃拉霍斯特内斯的筛子做过,但似乎太慢了。我不知道该怎么办。这是我的密码: 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 &l

所以我必须对从1到8*10^6的10^6个不同的数字进行素数分解。我用埃拉霍斯特内斯的筛子做过,但似乎太慢了。我不知道该怎么办。这是我的密码:

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;
            }
        }
    }
}
int因子[8000001]={};
空隙筛(int*选项卡,int max)
{
对于(int i=2;i*ii | | tab[i*j]==0)
tab[i*j]=i;
}
}
}
}
在main()中:

cin>>编号;
而(数量>1)
{
如果(系数[数字]==0)
{

tab和factors[]一样吗?还有,你没有整数溢出吗?是的,tab等于factors(更具体地说,它是一个指向factors的指针),我将它传递给siever()函数。我几乎可以肯定没有intiger溢出,所有的数字都小于8*10^6,intiger最多为2147483647。编辑:factors[]是否在全局范围内?是否必须按递增顺序打印因子?如果不是,则可以删除sieve()中的If条件。不幸的是,必须按递增顺序打印,每个因子后的星号也很重要:/
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";