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"); }
double gop(char **a){ char *v=*a; if(isnum(*v)) return gnum(a); else return gfun(a); return 0.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]; }
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; }
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]); }
//--------------------------------------------------------- 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 }
int main(int argc,char **argv){ option(argc,argv); //expre(argv[1]); char *p=argv[1]; printf("%f %s\n",gnum(&p),p); }