Example #1
0
int main()
{
  NODE nodes[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'};
  EDGE edges_I[] = {
    {'A', 'B'}, {'A', 'F'}, {'B', 'F'}, {'F', 'H'}, {'E', 'B'}, {'E', 'D'},
    {'D', 'H'}, {'D', 'C'}, {'G', 'E'}, {'G', 'C'}, {'I', 'E'}, {'I', 'C'},
  };
  EDGE edges_II[] = {
    {'A', 'B'}, {'A', 'F'}, {'B', 'F'}, {'F', 'H'}, {'E', 'B'}, {'E', 'D'},
    {'D', 'H'}, {'D', 'C'}, {'G', 'E'}, {'G', 'C'}, {'I', 'E'}, {'I', 'C'},
  };
  knuth(nodes, edges_I, sizeof(nodes)/sizeof(NODE),
        sizeof(edges_I)/sizeof(EDGE));
  bentley(nodes, edges_II, sizeof(nodes)/sizeof(NODE),
          sizeof(edges_II)/sizeof(EDGE));
  return 0;
}
Example #2
0
int initv(void)
{
    int i,d,pak,k,maxp;
    double dp;

    mpz_inits(N, TA, D, R, V, P, X, Y, DG, IG, A, B, TB, TC, TD, NULL);

    nbts=8*sizeof(int);

    printf("Input N= \n");
    d=mpz_inp_str(N, stdin, 10); //待分解的整数
    if((mpz_probab_prime_p(N, qsieve->NTRY) ? TRUE : FALSE))
    {
        printf("N is prime!\n");
        return (-1);
    }

    if(d<8) mm=d; // 分解基的理想大小
    else if(d>20) mm=(d*d*d*d)/4096; 
    else mm=25;

    dp=(double)2*(double)(mm+100); // dp:生成素数的数量 +100 *2均是为了更加保险
    maxp=(int)(dp*(log(dp*log(dp)))); // 罗素上界 maxp
    qsieve_gprime(maxp);

    epr=(int *)qsieve_alloc(mm+1,sizeof(int));

    k=knuth(mm,epr,N,D);

    if(mpz_root(R, D, 2)) //检查完全平方数
    {
        printf("Factors are\n");
        qsieve_outnum(R,stdout);
        qsieve_divide(N,R,N);
        qsieve_outnum(N,stdout);
        return -1;
    }

    qsieve_gprime(0);

    mlf=2*mm;
//各种开空间,初始化
    r1=(int *)qsieve_alloc((mm+1),sizeof(int));
    r2=(int *)qsieve_alloc((mm+1),sizeof(int));
    rp=(int *)qsieve_alloc((mm+1),sizeof(int));
    b=(int *)qsieve_alloc((mm+1),sizeof(int));
    e=(int *)qsieve_alloc((mm+1),sizeof(int));

    logp=(unsigned char *)qsieve_alloc(mm+1,1);

    pr=(int *)qsieve_alloc((mlf+1),sizeof(int));
    hash=(int *)qsieve_alloc((2*mlf+1),sizeof(int));

    sieve=(unsigned char *)qsieve_alloc(SSIZE+1,1);

    x=(mpz_t *)qsieve_alloc(mm+1,sizeof(mpz_t));
    y=(mpz_t *)qsieve_alloc(mm+1,sizeof(mpz_t));
    z=(mpz_t *)qsieve_alloc(mlf+1,sizeof(mpz_t));
    w=(mpz_t *)qsieve_alloc(mlf+1,sizeof(mpz_t));

    for(i=0;i<=mm;i++)
    {
        mpz_init(x[i]);
        mpz_init(y[i]);
    }
    for(i=0;i<=mlf;i++)
    {
        mpz_init(z[i]);
        mpz_init(w[i]);
    }

    EE=(unsigned int **)qsieve_alloc(mm+1,sizeof(unsigned int *));
    G=(unsigned int **)qsieve_alloc(mlf+1,sizeof(unsigned int *));

    pak=1+mm/(8*sizeof(int));
    for(i=0;i<=mm;i++)
    {
        b[i]=(-1);
        EE[i]=(unsigned int *)qsieve_alloc(pak,sizeof(int));
    }

    for(i=0;i<=mlf;i++) G[i]=(unsigned int *)qsieve_alloc(pak,sizeof(int));
    return 1;
}