int main(){
    int round = 15;
    GeneralInteger gden(1);
    GeneralInteger gnum(0);
    for(int i= 0; i< round; ++i){
        gden = gden.multiply(i+2);
    }
    gden.print();
    printf("\n");
    for(int i = (round/2)+1; i<=round; ++i){
        vector<int> combi;
        vector<int> flag;
        combi.resize(i);
        for(unsigned int j = 0; j < combi.size(); ++j)
            combi[j]= j;
        do{
            flag.clear();
            flag.resize(round, 0);
            for(unsigned int j = 0; j < combi.size(); ++j)
                flag[combi[j]] = 1;
            GeneralInteger gtp(1);
            for(unsigned int j = 0; j < flag.size(); ++j){
                if(flag[j] == 0)
                    gtp = gtp.multiply(j+1);
            }
            gnum += gtp;
        }while(next_combination(combi, round, i));
    }
    gnum.print(1);
    GeneralInteger gr(1);
    gden.print();
    //gr= gden.divide();
    printf("\n");
}
Beispiel #2
0
double gop(char **a){
  char *v=*a;
  if(isnum(*v))
	  return gnum(a);
  else
	  return gfun(a);
  return 0.0;
}
Beispiel #3
0
int go(int l1,int l2)
{
    int i,j,k,l,o=gnum();
    if(s[o][l1][l2]>0)
        return s[o][l1][l2];
    s[o][l1][l2]=0;
    u[l1]-=l2;
    if(!gnum())
    {
        u[l1]+=l2;
        return 1;
    }
    for(k=0;k<4;k++)
        for(l=1;l<4 && l<=u[k];l++)
            if(k!=l1 && l!=l2)
                s[o][l1][l2]+=go(k,l);
    u[l1]+=l2;
    return s[o][l1][l2];
}
Beispiel #4
0
double gfun(char **a){
  char *v=*a;
  char buf[64];
  int r=0;
  double ret=0;
  while(isa1(*v)){
	buf[r++]=*v;
	v++;
  }
  buf[r]=0;
  *a=v;
  if(ismf(buf)==-1) error("unknown function\n");
  seek(&v);
  if(*v=='(') {
	seek(&v);
	return farr[ismf(buf)].act(gnum(&v));
  }
  else error("not proper function\n");
  return ret;
}
Beispiel #5
0
int expr(char *v){
  int run=0;
  char p=0;
  double pair[2];
  while(*v){
    switch(*v){
	case '0' ... '9':
	{
	  pair[0]=gnum(&v);
	  p=(p==0?1:1);
	  break;
	}
	case '+': 
	{
	  v++;seek(&v);
	  pair[0]+=gop(&v);
	  break;
	}
	case '-': v++;seek(&v);
		  pair[0]-=gop(&v);
		  break;
	case '*': v++;seek(&v);
		  pair[0]*=gop(&v);
		  break;
	case '/': v++;seek(&v);
		  pair[0]/=gop(&v);
		  break;
	case '^':v++;seek(&v);
		 pair[0]=pow(pair[0],gop(&v));
		 break;
	case 'a' ... 'z':
		p=(p==0?1:1);
		pair[0]=gfun(&v);
		break;
	default:v++;break;
    }
  }
out:
  printf("%g\n",pair[0]);
}
Beispiel #6
0
//---------------------------------------------------------
void NDG3D::Hrefine3D(IVec& refineflag)
//---------------------------------------------------------
{
  DVec lVX("lVX"), lVY("lVY"), lVZ("lVZ");

  int a=1, b=2, c=3, d=4, e=5, 
      f=6, g=7, h=8, i=9, j=10;

  //             a b c d  e    f    g    h    i    j
  lVX.load(10, " 0 1 0 0  0.5  0.5  0.0  0.0  0.5  0.0 ");
  lVY.load(10, " 0 0 1 0  0.0  0.5  0.5  0.0  0.0  0.5 ");
  lVZ.load(10, " 0 0 0 1  0.0  0.0  0.0  0.5  0.5  0.5 ");

  assert(4 == Nfaces);

  IMat lEToV(8,4, "lEToV"), im84(8,4, "im84"), oFnodes(4,6, "oFnodes");

  set84(lEToV, 8,4, 
           a, e, g, h,
	         e, b, f, i,
	         g, f, c, j,
	         h, i, j, d,
	         e, g, h, i,
	         h, i, g, j,
	         e, f, g, i,
	         g, i, f, j);

  set46(oFnodes, 4,6, 
           a, e, b, f, c, g,
	         a, e, b, i, d, h,
	         b, f, c, j, d, i,
	         a, g, c, j, d, h);

  IMat vnum(gRowData, 4,3, "1 2 3  1 2 4  2 3 4  3 1 4");

  int lK = lEToV.num_rows();
  IMat lBCType(lK, Nfaces), tm1, tm2;
  IVec tv(3),tv1,tv2, oFn,vnp,ksids;
  int kk=0,ff=0,oo=0;
  for (kk=1; kk<=lK; ++kk) {
    for (ff=1; ff<=Nfaces; ++ff) {
      for (oo=1; oo<=Nfaces; ++oo) 
      {
        oFn = oFnodes.get_row(oo);
        vnp = vnum.get_row(ff);
        tm1 = lEToV(kk, vnp);  const IVec& knodes = dynamic_cast<const IVec&>(tm1);

      //tv = intersect(lEToV(k, vnum(p,All)), oFnodes(o,All));
        tv = intersect(knodes, oFn);

        if ( tv.length()==3 ) {
	        lBCType(kk, ff) = oo;
        }
      }
    }
  }

  int NV = VX.length()+1;
  int sp_len = NV + NV*NV;

  // sparse buffers   nnz  vals,triplet
  CSd newVX(sp_len,1,  NV,    1,  1);
  CSd newVY(sp_len,1,  NV,    1,  1);
  CSd newVZ(sp_len,1,  NV,    1,  1);

  Index1D II(1, NV-1);
  newVX(II,1) = VX;
  newVY(II,1) = VY;
  newVZ(II,1) = VZ;

  IVec ids("ids");
  int oldK = K, f1=0;

  for (int k1=1; k1<=oldK; ++k1) {
    if (refineflag(k1)) 
    {
      a = EToV(k1,1); 
      b = EToV(k1,2); 
      c = EToV(k1,3); 
      d = EToV(k1,4);

      e = NV + std::max(a*NV+b, b*NV + a);
      f = NV + std::max(b*NV+c, c*NV + b);
      g = NV + std::max(a*NV+c, c*NV + a);
      h = NV + std::max(a*NV+d, d*NV + a);
      i = NV + std::max(b*NV+d, d*NV + b);
      j = NV + std::max(c*NV+d, d*NV + c);

    //ks = [k1, K+1:K+7];
      IVec ks(1, k1);  ks.append(Range(K+1,K+7));

      //--------------------------
      // EToV(ks,:) = [a e g h;
		  //               e b f i;
		  //               g f c j;
		  //               h i j d;
		  //               e g h i;
		  //               h i g j;
		  //               e f g i;
		  //               g i f j];
      //--------------------------

      set84(im84, 8,4, 
            a, e, g, h,
		        e, b, f, i,
		        g, f, c, j,
		        h, i, j, d,
		        e, g, h, i,
		        h, i, g, j,
		        e, f, g, i,
		        g, i, f, j);

    //EToV(ks,All) = im84;
      EToV.merge_rows(ks, im84);

      for (f1=1; f1<=Nfaces; ++f1) 
      {
        tv = lBCType(All,f1);
        ids = find(tv, '!', 0);
        ksids = ks(ids);
        tm1 = lBCType(ids,f1);
        tm2 = BCType(k1, (const IVec&)tm1);

        // expand BCType to accommodate new range
        int maxI=ksids.max_val(), maxR=BCType.num_rows();
        if (maxI>maxR) {BCType.realloc(maxI, BCType.num_cols());}

        BCType(ksids,f1) = trans(tm2);
      }

      K += 7;

      newVX.set1(e,1, 0.5*(VX(a)+VX(b))); 
      newVX.set1(f,1, 0.5*(VX(b)+VX(c)));
      newVX.set1(g,1, 0.5*(VX(c)+VX(a)));
      newVX.set1(h,1, 0.5*(VX(a)+VX(d)));
      newVX.set1(i,1, 0.5*(VX(b)+VX(d)));
      newVX.set1(j,1, 0.5*(VX(c)+VX(d)));

      newVY.set1(e,1, 0.5*(VY(a)+VY(b)));
      newVY.set1(f,1, 0.5*(VY(b)+VY(c)));
      newVY.set1(g,1, 0.5*(VY(c)+VY(a)));
      newVY.set1(h,1, 0.5*(VY(a)+VY(d)));
      newVY.set1(i,1, 0.5*(VY(b)+VY(d)));
      newVY.set1(j,1, 0.5*(VY(c)+VY(d)));

      newVZ.set1(e,1, 0.5*(VZ(a)+VZ(b)));
      newVZ.set1(f,1, 0.5*(VZ(b)+VZ(c)));
      newVZ.set1(g,1, 0.5*(VZ(c)+VZ(a)));
      newVZ.set1(h,1, 0.5*(VZ(a)+VZ(d)));
      newVZ.set1(i,1, 0.5*(VZ(b)+VZ(d)));
      newVZ.set1(j,1, 0.5*(VZ(c)+VZ(d)));
    }
  }

  //-------------------------------------
  // drop duplicates and sort
  //-------------------------------------
  newVX.compress(true);
  newVY.compress(true);
  newVZ.compress(true);

//ids = sort(unique(EToV(:)), 'ascend');
  ids = unique(EToV);


  int len=ids.max_val(); 
  IVec gnum(len);
  gnum(ids) = Range(1,ids.length());

  VX = full( newVX, ids );
  VY = full( newVY, ids );
  VZ = full( newVZ, ids );

  // EToV = gnum(EToV);
  EToV.set_map(EToV, gnum);

  int NV_old = NV-1;        // local counters
  this->Nv = VX.length();   // update member variable

  umLOG(1, "Hrefine3D [%d] : old Nv = %4d, new Nv = %4d\n", ++refine_count, NV_old, Nv);
  umLOG(1, "                old K  = %4d, new K  = %4d\n\n", oldK, K);


#if (0)
  tetramesh(EToV, [VX', VY', VZ'])
#endif

}
Beispiel #7
0
int main(int argc,char **argv){
  option(argc,argv); 
  //expre(argv[1]);
  char *p=argv[1];
  printf("%f %s\n",gnum(&p),p);
}