C - 如何找到一个数字的原始根



这是我试图编译的代码,用于查找原始根...但它给了我错误。

int isPrimitive (int q, int a) {
int i,z;
double k,s;
s=1;
i=0;
double *factors=malloc(sizeof(double)*q-2);    
while (s>0 && i<q-2) {
    k=pow(a,i);
    s=k-(q*floor(k/q));
    for (z=0;z<(sizeof(*factors)/sizeof(factors[0]));z++) {
        if (factors[z]==s) {
            return 0;
        }
    }
    factors[i]=s;
    i++;
}

在这条线上double *factors=malloc(sizeof(double)*q-2);错误 从 void* 到 double* 的转换无效。

几乎可以肯定,问题在于在 C 代码上使用 C++ 编译器。在 C 中,void*可以转换为任何没有强制转换的指针类型,而在C++中并非如此,因此会出现错误消息。基本上有两种解决方案:使用 C 编译器(例如 gcc而不是g++),或投射马洛克的结果。

后者可以通过以下方式完成:

double *factors = static_cast<double*> (malloc(sizeof(double)*(q-2)));

但是如果你实际上是在写C++,那么使用 new [] 语法会更好:

double *factors = new double [q-2];

(请注意,这需要使用delete[] factors而不是free(factors)

相关内容

  • 没有找到相关文章

最新更新