用于logarithms_C的Pollard rho算法,指针错误

时间:2014-05-13 05:28:41

标签: c algorithm pointers discrete-mathematics

我正在编写关于Pollard的rho算法的C,来自wiki,Pollard的rho算法用于对数。但是我遇到了运行时错误,我不知道。我想它可能来自指针。你会发现错误吗?

#include<stdio.h>
#include<math.h>

int alpha, beta, N;

void xab(int *x, int *a, int *b)
{
    switch(*x%3){
    case 0: *x=((*x)*(*x))%N;   *a=((*a)*2)%N;  *b=((*b)*2)%N;  break;
    case 1: *x=(alpha*(*x))%N;  *a=((*a)+1)%N;  break;
    case 2: *x=(beta*(*x))%N;   *b=((*b)+1)%N;  break;
    }
}

int main(void)
{
    int x=1;    int a=0;    int b=0;
    int X=1;    int A=0;    int B=0;
    int i;

    scanf("%d %d %d", alpha, beta, N);

    for(i=1;i<N;i++){
        xab(&x,&a,&b);
        xab(&X,&A,&B);  xab(&X,&A,&B);
        if(x=X) break;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

 scanf("%d %d %d", alpha, beta, N);

应该是

 scanf("%d %d %d", &alpha, &beta, &N);