发博文
个人资料
MathsElf
MathsElf
  • 博客等级:
  • 博客积分:241
  • 博客访问:8,389
  • 关注人气:1
评论
加载中…
留言
加载中…
图片播放器
友情链接

孙若愚

比我高两届的学长,北大校友,数学牛人,足球超级棒!

李先颖

比我高三届的学长,IMO金牌,附中数学史上最有名的人物

曾晨

比我高一届的学姐,热爱音乐,在我最喜欢的电台--CityFM长沙台主持节目--<<城市周末没大人>>

王伟

比我高四届的学长,IMO金牌,北大校友,非常风趣幽默,

访客
加载中…
好友
加载中…
博文
标签:

杂谈

1000+行。。大意是输入曲线方程、两点P,Q可以生成[m]P+[n]Q这种东西的。。

个人编程序很烂。。凑合着看,凑合着用……

 

---

 

 

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

int reda(int m,int n){
 if(n==0){
  return 1;
 } 
 else if(n<0){
  m=-m;
  n=-n;
 }
 int i;
 for(i=n;i>0;i--)
  if(m%i==0&&n%i==0) break;
 return m/i;
}

int redb(int m,int n){
 if(n==0){
  return 0;
 } 
 else if(n<0){
  m=-m;
  n=-n;
 }
 int i;
 for(i=n;i>0;i--)
  if(m%i==0&&n%i==0) break;
 return n/i;
}

int main(){
 int a; int b; int c; int d; int e;
 int p; int q; int r; int s; int u; int v; int w; int t;
    printf("Welcome to EC Calculator Program.\n\n");
 printf("The equation is y^3+axy+by=x^3+cx^2+dx+e\n");
 printf("Please entering five coefficients a,b,c,d,e\n");
 scanf("%d,%d,%d,%d,%d", &a, &b, &c, &d, &e);
    printf("\nNow the equation is:\n\ny^2+%dxy+%dy=x^3+%dx^2+%dx+%d\n\n", a,b,c,d,e);
    printf("Please entering the infinite point as (1/0, 1/0)\n"); 
 printf("Please entering the first point P=(x,y)=(p/q, r/s)\n");
 scanf("%d,%d,%d,%d", &p, &q, &r, &s);
 printf("Please entering the second point Q=(x',y')=(u/v, w/t)\n");
 scanf("%d,%d,%d,%d", &u, &v, &w, &t);
 int pp=p; int qq=q; int rr=r; int ss=s;
 int uu=u; int vv=v; int ww=w; int tt=t;
 printf("\nNow these two points are:\n\n");
 if((q!=1 || s!=1) && (v!=1 || t!=1)){
  printf("P=(%d/%d,%d/%d) and Q=(%d/%d,%d/%d)\n\n", p,q,r,s,u,v,w,t);
 }
 else if((q==1 && s==1) && (v!=1 || t!=1)){
  printf("P=(%d,%d) and Q=(%d/%d,%d/%d)\n\n", p,r,u,v,w,t);
 }
 else if((q!=1 || s!=1) && (v==1 && t==1)){
  printf("P=(%d/%d,%d/%d) and Q=(%d,%d)\n\n", p,q,r,s,u,w);
 }
 else if((q==1 && s==1) && (v==1 && t==1)){
  printf("P=(%d,%d) and Q=(%d,%d)\n\n", p,r,u,w);
 }
 if(p==1 && q==0 && r==1 && s==0){
 }
 else if(u==1 && v==0 && w==1 && t==0){
 }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
     if(p==u && q==v && r==w && s==t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
   ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
   kb=2*r*q*q+a*p*s*q-b*s*q*q;
   kra=reda(ka,kb); krb=redb(ka,kb);
   la=r*krb*q-s*kra*p;
   lb=s*krb*q;
   lra=reda(la,lb); lrb=redb(la,lb);
   int xa; int xb; int xra; int xrb;
   int ya; int yb; int yra; int yrb;
   xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
   xb=q*krb*krb;
   xra=reda(xa,xb); xrb=redb(xa,xb);
   ya=-(kra*xra*lrb+krb*xrb*lra);
   yb=krb*xrb*lrb;
   yra=reda(ya,yb); yrb=redb(ya,yb);
  }
  else if(p!=u || q!=v || r!=w || s!=t){
   int ka; int kb; int kra; int krb;
   int la; int lb; int lra; int lrb;
   ka=r*t*q*v-w*s*q*v;
   kb=p*s*t*v-u*s*t*q;
   kra=reda(ka,kb); krb=redb(ka,kb);
   la=r*krb*q-s*kra*p;
   lb=s*krb*q;
   lra=reda(la,lb); lrb=redb(la,lb);
   int xa; int xb; int xra; int xrb;
   int ya; int yb; int yra; int yrb;
   xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
   xb=q*v*krb*krb;
   xra=reda(xa,xb); xrb=redb(xa,xb);
   ya=-(kra*xra*lrb+krb*xrb*lra);
   yb=krb*xrb*lrb;
   yra=reda(ya,yb); yrb=redb(ya,yb);
  }
 }
 
 
 
 int axiomP=2; int axiomQ=6;
 int ii=axiomP; int jj=axiomQ;
 int i; int j;
 int pg[ii][jj]; int qg[ii][jj]; int rg[ii][jj]; int sg[ii][jj];
 pg[0][0]=1; qg[0][0]=0; rg[0][0]=1; sg[0][0]=0;
 pg[1][0]=pp; qg[1][0]=qq; rg[1][0]=rr; sg[1][0]=ss;
 pg[0][1]=uu; qg[0][1]=vv; rg[0][1]=ww; sg[0][1]=tt; 
 
 printf("The point 0 is (1/0, 1/0)\n");
 
 if(vv==1 && tt==1){
  printf("*** The point [1]Q is (%d, %d) ***\n", uu,ww);
 }
 else if(vv!=1 || tt!=1){
  printf("The point [1]Q is (%d/%d, %d/%d)\n", uu,vv,ww,tt);
 }
 
 i=0; j=2;
 
 
 
 for(j=2;j<=jj;j++){
  if(j%2==0){   
   p=pg[0][j/2]; q=qg[0][j/2]; r=rg[0][j/2]; s=sg[0][j/2];
   u=pg[0][j/2]; v=qg[0][j/2]; w=rg[0][j/2]; t=sg[0][j/2];
   if(p==1 && q==0 && r==1 && s==0){
    int xra=reda(u,v); int xrb=redb(u,v);
    int yra=reda(w,t); int yrb=redb(w,t);
    if(xrb==1 && yrb==1){
     printf("*** The point [%d]Q is (%d, %d) ***\n", j,xra,yra);
    }
    else if(xrb!=1 || yrb!=1){
     printf("The point [%d]Q is (%d/%d, %d/%d)\n", j,xra,xrb,yra,yrb);
    }
    pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
    int xra=reda(p,q); int xrb=redb(p,q);
    int yra=reda(r,s); int yrb=redb(r,s);
    if(xrb==1 && yrb==1){
     printf("*** The point [%d]Q is (%d, %d) ***\n", j,xra,yra);
    }
    else if(xrb!=1 || yrb!=1){
     printf("The point [%d]Q is (%d/%d, %d/%d)\n", j,xra,xrb,yra,yrb);
    }
    pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
    if(p==u && q==v && r==w && s==t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
     kb=2*r*q*q+a*p*s*q-b*s*q*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
     xb=q*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]Q is (%d, %d) ***\n", j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]Q is (%d/%d, %d/%d)\n", j,xra,xrb,yra,yrb);
     }
     pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
    }
    else if(p!=u || q!=v || r!=w || s!=t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=r*t*q*v-w*s*q*v;
     kb=p*s*t*v-u*s*t*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
     xb=q*v*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]Q is (%d, %d) ***\n", j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]Q is (%d/%d, %d/%d)\n", j,xra,xrb,yra,yrb);
     }
     pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
    }
   }
  }
  else if(j%2==1){   
   p=pg[0][(j+1)/2]; q=qg[0][(j+1)/2]; r=rg[0][(j+1)/2]; s=sg[0][(j+1)/2];
   u=pg[0][(j-1)/2]; v=qg[0][(j-1)/2]; w=rg[0][(j-1)/2]; t=sg[0][(j-1)/2];
   if(p==1 && q==0 && r==1 && s==0){
    int xra=reda(u,v); int xrb=redb(u,v);
    int yra=reda(w,t); int yrb=redb(w,t);
    if(xrb==1 && yrb==1){
     printf("*** The point [%d]Q is (%d, %d) ***\n", j,xra,yra);
    }
    else if(xrb!=1 || yrb!=1){
     printf("The point [%d]Q is (%d/%d, %d/%d)\n", j,xra,xrb,yra,yrb);
    }
    pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
    int xra=reda(p,q); int xrb=redb(p,q);
    int yra=reda(r,s); int yrb=redb(r,s);
    if(xrb==1 && yrb==1){
     printf("*** The point [%d]Q is (%d, %d) ***\n", j,xra,yra);
    }
    else if(xrb!=1 || yrb!=1){
     printf("The point [%d]Q is (%d/%d, %d/%d)\n", j,xra,xrb,yra,yrb);
    }
    pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
    if(p==u && q==v && r==w && s==t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
     kb=2*r*q*q+a*p*s*q-b*s*q*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
     xb=q*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]Q is (%d, %d) ***\n", j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]Q is (%d/%d, %d/%d)\n", j,xra,xrb,yra,yrb);
     }
     pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
    }
    else if(p!=u || q!=v || r!=w || s!=t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=r*t*q*v-w*s*q*v;
     kb=p*s*t*v-u*s*t*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
     xb=q*v*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]Q is (%d, %d) ***\n", j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]Q is (%d/%d, %d/%d)\n", j,xra,xrb,yra,yrb);
     }
     pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
    }
   }
  }
 } 
 
 
  
 pg[0][0]=1; qg[0][0]=0; rg[0][0]=1; sg[0][0]=0;
 pg[1][0]=pp; qg[1][0]=qq; rg[1][0]=rr; sg[1][0]=ss;
 pg[0][1]=uu; qg[0][1]=vv; rg[0][1]=ww; sg[0][1]=tt;
 
 i=2; j=0;
 
 if(qq==1 && ss==1){
  printf("*** The point [1]P is (%d, %d) ***\n", pp,rr);
 }
 else if(qq!=1 || ss!=1){
  printf("The point [1]P is (%d/%d, %d/%d)\n", pp,qq,rr,ss);
 }
 
 for(i=2;i<=ii;i++){
  if(i%2==0){   
   p=pg[i/2][0]; q=qg[i/2][0]; r=rg[i/2][0]; s=sg[i/2][0];
   u=pg[i/2][0]; v=qg[i/2][0]; w=rg[i/2][0]; t=sg[i/2][0];
   if(p==1 && q==0 && r==1 && s==0){
    int xra=reda(u,v); int xrb=redb(u,v);
    int yra=reda(w,t); int yrb=redb(w,t);
    if(xrb==1 && yrb==1){
     printf("*** The point [%d]P is (%d, %d) ***\n", i,xra,yra);
    }
    else if(xrb!=1 || yrb!=1){
     printf("The point [%d]P is (%d/%d, %d/%d)\n", i,xra,xrb,yra,yrb);
    }
    pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
    int xra=reda(p,q); int xrb=redb(p,q);
    int yra=reda(r,s); int yrb=redb(r,s);
    if(xrb==1 && yrb==1){
     printf("*** The point [%d]P is (%d, %d) ***\n", i,xra,yra);
    }
    else if(xrb!=1 || yrb!=1){
     printf("The point [%d]P is (%d/%d, %d/%d)\n", i,xra,xrb,yra,yrb);
    }
    pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
    if(p==u && q==v && r==w && s==t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
     kb=2*r*q*q+a*p*s*q-b*s*q*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
     xb=q*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P is (%d, %d) ***\n", i,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P is (%d/%d, %d/%d)\n", i,xra,xrb,yra,yrb);
     }
     pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
    }
    else if(p!=u || q!=v || r!=w || s!=t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=r*t*q*v-w*s*q*v;
     kb=p*s*t*v-u*s*t*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
     xb=q*v*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P is (%d, %d) ***\n", i,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P is (%d/%d, %d/%d)\n", i,xra,xrb,yra,yrb);
     }
     pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
    }
   }
  }
  else if(i%2==1){   
   p=pg[(i+1)/2][0]; q=qg[(i+1)/2][0]; r=rg[(i+1)/2][0]; s=sg[(i+1)/2][0];
   u=pg[(i-1)/2][0]; v=qg[(i-1)/2][0]; w=rg[(i-1)/2][0]; t=sg[(i-1)/2][0];
   if(p==1 && q==0 && r==1 && s==0){
    int xra=reda(u,v); int xrb=redb(u,v);
    int yra=reda(w,t); int yrb=redb(w,t);
    if(xrb==1 && yrb==1){
     printf("*** The point [%d]P is (%d, %d) ***\n", i,xra,yra);
    }
    else if(xrb!=1 || yrb!=1){
     printf("The point [%d]P is (%d/%d, %d/%d)\n", i,xra,xrb,yra,yrb);
    }
    pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
    int xra=reda(p,q); int xrb=redb(p,q);
    int yra=reda(r,s); int yrb=redb(r,s);
    if(xrb==1 && yrb==1){
     printf("*** The point [%d]P is (%d, %d) ***\n", i,xra,yra);
    }
    else if(xrb!=1 || yrb!=1){
     printf("The point [%d]Pis (%d/%d, %d/%d)\n", i,xra,xrb,yra,yrb);
    }
    pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
    if(p==u && q==v && r==w && s==t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
     kb=2*r*q*q+a*p*s*q-b*s*q*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
     xb=q*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P is (%d, %d) ***\n", i,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P is (%d/%d, %d/%d)\n", i,xra,xrb,yra,yrb);
     }
     pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
    }
    else if(p!=u || q!=v || r!=w || s!=t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=r*t*q*v-w*s*q*v;
     kb=p*s*t*v-u*s*t*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
     xb=q*v*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P is (%d, %d) ***\n", i,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P is (%d/%d, %d/%d)\n", i,xra,xrb,yra,yrb);
     }
     pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
    }
   }
  }
 }
 
  
 
 
  
 pg[0][0]=1; qg[0][0]=0; rg[0][0]=1; sg[0][0]=0;
 pg[1][0]=pp; qg[1][0]=qq; rg[1][0]=rr; sg[1][0]=ss;
 pg[0][1]=uu; qg[0][1]=vv; rg[0][1]=ww; sg[0][1]=tt;
 
 int ph[ii][jj]; int qh[ii][jj]; int rh[ii][jj]; int sh[ii][jj];
 i=0;j=0;
 for(j=0;j<=jj;j++){
  ph[i][j]=pg[i][j]; qh[i][j]=qg[i][j]; rh[i][j]=rg[i][j]; sh[i][j]=sg[i][j];
 }
 i=1;j=0;
 for(i=0;i<=ii;i++){
  ph[i][j]=pg[i][j]; qh[i][j]=qg[i][j]; rh[i][j]=rg[i][j]; sh[i][j]=sg[i][j];
 }
 
 i=1;j=1;
 
 for(i=1;i<=ii;i++){
  int k=1;
     for(k=1;k<=i;k++){
   ph[k][0]=pg[k][0]; qh[k][0]=qg[k][0]; rh[k][0]=rg[k][0]; sh[k][0]=sg[k][0];
  }
  for(j=1;j<=jj;j++){
   if(i%2==0 && j%2==0){
    p=ph[i/2][j/2]; q=qh[i/2][j/2]; r=rh[i/2][j/2]; s=sh[i/2][j/2];
    u=ph[i/2][j/2]; v=qh[i/2][j/2]; w=rh[i/2][j/2]; t=sh[i/2][j/2];
    if(p==1 && q==0 && r==1 && s==0){
     int xra=reda(u,v); int xrb=redb(u,v);
     int yra=reda(w,t); int yrb=redb(w,t);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
     int xra=reda(p,q); int xrb=redb(p,q);
     int yra=reda(r,s); int yrb=redb(r,s);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
     if(p==u && q==v && r==w && s==t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
      kb=2*r*q*q+a*p*s*q-b*s*q*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
      xb=q*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
     else if(p!=u || q!=v || r!=w || s!=t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=r*t*q*v-w*s*q*v;
      kb=p*s*t*v-u*s*t*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
      xb=q*v*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
    }
   }
  
  
  
   
   else if(i%2!=0 && j%2==0){   
    p=ph[(i+1)/2][j/2]; q=qh[(i+1)/2][j/2]; r=rh[(i+1)/2][j/2]; s=sh[(i+1)/2][j/2];
    u=ph[(i-1)/2][j/2]; v=qh[(i-1)/2][j/2]; w=rh[(i-1)/2][j/2]; t=sh[(i-1)/2][j/2];
    if(p==1 && q==0 && r==1 && s==0){
     int xra=reda(u,v); int xrb=redb(u,v);
     int yra=reda(w,t); int yrb=redb(w,t);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
     int xra=reda(p,q); int xrb=redb(p,q);
     int yra=reda(r,s); int yrb=redb(r,s);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
     if(p==u && q==v && r==w && s==t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
      kb=2*r*q*q+a*p*s*q-b*s*q*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
      xb=q*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
     else if(p!=u || q!=v || r!=w || s!=t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=r*t*q*v-w*s*q*v;
      kb=p*s*t*v-u*s*t*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
      xb=q*v*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
    }
   }
 
 
 
   else if(i%2==0 && j%2!=0){   
    p=ph[i/2][(j+1)/2]; q=qh[i/2][(j+1)/2]; r=rh[i/2][(j+1)/2]; s=sh[i/2][(j+1)/2];
    u=ph[i/2][(j-1)/2]; v=qh[i/2][(j-1)/2]; w=rh[i/2][(j-1)/2]; t=sh[i/2][(j-1)/2];
    if(p==1 && q==0 && r==1 && s==0){
     int xra=reda(u,v); int xrb=redb(u,v);
     int yra=reda(w,t); int yrb=redb(w,t);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
     int xra=reda(p,q); int xrb=redb(p,q);
     int yra=reda(r,s); int yrb=redb(r,s);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
     if(p==u && q==v && r==w && s==t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
      kb=2*r*q*q+a*p*s*q-b*s*q*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
      xb=q*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
     else if(p!=u || q!=v || r!=w || s!=t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=r*t*q*v-w*s*q*v;
      kb=p*s*t*v-u*s*t*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
      xb=q*v*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
    }
   }
   
 
      
   else if(i%2!=0 && j%2!=0){
    p=ph[(i-1)/2][(j+1)/2]; q=qh[(i-1)/2][(j+1)/2]; r=rh[(i-1)/2][(j+1)/2]; s=sh[(i-1)/2][(j+1)/2];
    u=ph[(i+1)/2][(j-1)/2]; v=qh[(i+1)/2][(j-1)/2]; w=rh[(i+1)/2][(j-1)/2]; t=sh[(i+1)/2][(j-1)/2];
    if(p==1 && q==0 && r==1 && s==0){
     int xra=reda(u,v); int xrb=redb(u,v);
     int yra=reda(w,t); int yrb=redb(w,t);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
     int xra=reda(p,q); int xrb=redb(p,q);
     int yra=reda(r,s); int yrb=redb(r,s);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
     if(p==u && q==v && r==w && s==t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
      kb=2*r*q*q+a*p*s*q-b*s*q*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
      xb=q*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
     else if(p!=u || q!=v || r!=w || s!=t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=r*t*q*v-w*s*q*v;
      kb=p*s*t*v-u*s*t*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
      xb=q*v*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
    }
   }
  }
 } 
 
 
 
 pg[0][0]=1; qg[0][0]=0; rg[0][0]=1; sg[0][0]=0;
 pg[1][0]=pp; qg[1][0]=qq; rg[1][0]=rr; sg[1][0]=ss;
 pg[0][1]=uu; qg[0][1]=vv;
 int rgx; int sgx;
 rgx=-ww*vv-a*uu*tt-b*vv*tt; sgx=tt*vv;
 rg[0][1]=reda(rgx,sgx); sg[0][1]=redb(rgx,sgx);
 
 if((a!=0 || b!=0) && qg[0][1]==1 && sg[0][1]==1){
  printf("*** The point [-1]Q is (%d, %d) ***\n",pg[0][1],rg[0][1]);
 }
 else if((a!=0 || b!=0) && (qg[0][1]!=1 || sg[0][1]!=1)){
  printf("The point [-1]Q is (%d/%d, %d/%d)\n",pg[0][1],qg[0][1],rg[0][1],sg[0][1]);
 }
 else if(a==0 && b==0){
 }
 
 i=0; j=2;
 
 
 
 for(j=2;j<=jj;j++){
  if(j%2==0){   
   p=pg[0][j/2]; q=qg[0][j/2]; r=rg[0][j/2]; s=sg[0][j/2];
   u=pg[0][j/2]; v=qg[0][j/2]; w=rg[0][j/2]; t=sg[0][j/2];
   if(p==1 && q==0 && r==1 && s==0){
    int xra=reda(u,v); int xrb=redb(u,v);
    int yra=reda(w,t); int yrb=redb(w,t);
    if((a!=0 || b!=0) && xrb==1 && yrb==1){
     printf("*** The point [%d]Q is (%d, %d) ***\n", -j,xra,yra);
    }
    else if((a!=0 || b!=0) && (xrb!=1 || yrb!=1)){
     printf("The point [%d]Q is (%d/%d, %d/%d)\n", -j,xra,xrb,yra,yrb);
    }
    else if(a==0 && b==0){
    }
    pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
    int xra=reda(p,q); int xrb=redb(p,q);
    int yra=reda(r,s); int yrb=redb(r,s);
    if((a!=0 || b!=0) && xrb==1 && yrb==1){
     printf("*** The point [%d]Q is (%d, %d) ***\n", -j,xra,yra);
    }
    else if((a!=0 || b!=0) && (xrb!=1 || yrb!=1)){
     printf("The point [%d]Q is (%d/%d, %d/%d)\n", -j,xra,xrb,yra,yrb);
    }
    else if(a==0 && b==0){
    }
    pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
    if(p==u && q==v && r==w && s==t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
     kb=2*r*q*q+a*p*s*q-b*s*q*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
     xb=q*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if((a!=0 || b!=0) && xrb==1 && yrb==1){
      printf("*** The point [%d]Q is (%d, %d) ***\n", -j,xra,yra);
     }
     else if((a!=0 || b!=0) && (xrb!=1 || yrb!=1)){
      printf("The point [%d]Q is (%d/%d, %d/%d)\n", -j,xra,xrb,yra,yrb);
     }
     else if(a==0 && b==0){
     }
     pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
    }
    else if(p!=u || q!=v || r!=w || s!=t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=r*t*q*v-w*s*q*v;
     kb=p*s*t*v-u*s*t*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
     xb=q*v*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if((a!=0 || b!=0) && xrb==1 && yrb==1){
      printf("*** The point [%d]Q is (%d, %d) ***\n", -j,xra,yra);
     }
     else if((a!=0 || b!=0) && (xrb!=1 || yrb!=1)){
      printf("The point [%d]Q is (%d/%d, %d/%d)\n", -j,xra,xrb,yra,yrb);
     }
     else if(a==0 && b==0){
     }
     pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
    }
   }
  }
  else if(j%2==1){   
   p=pg[0][(j+1)/2]; q=qg[0][(j+1)/2]; r=rg[0][(j+1)/2]; s=sg[0][(j+1)/2];
   u=pg[0][(j-1)/2]; v=qg[0][(j-1)/2]; w=rg[0][(j-1)/2]; t=sg[0][(j-1)/2];
   if(p==1 && q==0 && r==1 && s==0){
    int xra=reda(u,v); int xrb=redb(u,v);
    int yra=reda(w,t); int yrb=redb(w,t);
    if((a!=0 || b!=0) && xrb==1 && yrb==1){
     printf("*** The point [%d]Q is (%d, %d) ***\n", -j,xra,yra);
    }
    else if((a!=0 || b!=0) && (xrb!=1 || yrb!=1)){
     printf("The point [%d]Q is (%d/%d, %d/%d)\n", -j,xra,xrb,yra,yrb);
    }
    else if(a==0 && b==0){
    }
    pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
    int xra=reda(p,q); int xrb=redb(p,q);
    int yra=reda(r,s); int yrb=redb(r,s);
    if((a!=0 || b!=0) && xrb==1 && yrb==1){
     printf("*** The point [%d]Q is (%d, %d) ***\n", -j,xra,yra);
    }
    else if((a!=0 || b!=0) && (xrb!=1 || yrb!=1)){
     printf("The point [%d]Q is (%d/%d, %d/%d)\n", -j,xra,xrb,yra,yrb);
    }
    else if(a==0 && b==0){
    }
    pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
    if(p==u && q==v && r==w && s==t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
     kb=2*r*q*q+a*p*s*q-b*s*q*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
     xb=q*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if((a!=0 || b!=0) && xrb==1 && yrb==1){
      printf("*** The point [%d]Q is (%d, %d) ***\n", -j,xra,yra);
     }
     else if((a!=0 || b!=0) && (xrb!=1 || yrb!=1)){
      printf("The point [%d]Q is (%d/%d, %d/%d)\n", -j,xra,xrb,yra,yrb);
     }
     else if(a==0 && b==0){
     }
     pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
    }
    else if(p!=u || q!=v || r!=w || s!=t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=r*t*q*v-w*s*q*v;
     kb=p*s*t*v-u*s*t*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
     xb=q*v*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     if((a!=0 || b!=0) && xrb==1 && yrb==1){
      printf("*** The point [%d]Q is (%d, %d) ***\n", -j,xra,yra);
     }
     else if((a!=0 || b!=0) && (xrb!=1 || yrb!=1)){
      printf("The point [%d]Q is (%d/%d, %d/%d)\n", -j,xra,xrb,yra,yrb);
     }
     else if(a==0 && b==0){
     }
     pg[0][j]=xra; qg[0][j]=xrb; rg[0][j]=yra; sg[0][j]=yrb;
    }
   }
  }
 } 
 
 
  
 pg[0][0]=1; qg[0][0]=0; rg[0][0]=1; sg[0][0]=0;
 pg[1][0]=pp; qg[1][0]=qq; rg[1][0]=rr; sg[1][0]=ss;
 pg[0][1]=uu; qg[0][1]=vv;
 rgx=-ww*vv-a*uu*tt-b*vv*tt; sgx=tt*vv;
 rg[0][1]=reda(rgx,sgx); sg[0][1]=redb(rgx,sgx);
 
 i=2; j=0;
 
 for(i=2;i<=ii;i++){
  if(i%2==0){   
   p=pg[i/2][0]; q=qg[i/2][0]; r=rg[i/2][0]; s=sg[i/2][0];
   u=pg[i/2][0]; v=qg[i/2][0]; w=rg[i/2][0]; t=sg[i/2][0];
   if(p==1 && q==0 && r==1 && s==0){
    int xra=reda(u,v); int xrb=redb(u,v);
    int yra=reda(w,t); int yrb=redb(w,t);
    pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
    int xra=reda(p,q); int xrb=redb(p,q);
    int yra=reda(r,s); int yrb=redb(r,s);
    pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
    if(p==u && q==v && r==w && s==t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
     kb=2*r*q*q+a*p*s*q-b*s*q*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
     xb=q*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
    }
    else if(p!=u || q!=v || r!=w || s!=t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=r*t*q*v-w*s*q*v;
     kb=p*s*t*v-u*s*t*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
     xb=q*v*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
    }
   }
  }
  else if(i%2==1){   
   p=pg[(i+1)/2][0]; q=qg[(i+1)/2][0]; r=rg[(i+1)/2][0]; s=sg[(i+1)/2][0];
   u=pg[(i-1)/2][0]; v=qg[(i-1)/2][0]; w=rg[(i-1)/2][0]; t=sg[(i-1)/2][0];
   if(p==1 && q==0 && r==1 && s==0){
    int xra=reda(u,v); int xrb=redb(u,v);
    int yra=reda(w,t); int yrb=redb(w,t);
    pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
    int xra=reda(p,q); int xrb=redb(p,q);
    int yra=reda(r,s); int yrb=redb(r,s);
    pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
   }
   else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
    if(p==u && q==v && r==w && s==t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
     kb=2*r*q*q+a*p*s*q-b*s*q*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
     xb=q*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
    }
    else if(p!=u || q!=v || r!=w || s!=t){
     int ka; int kb; int kra; int krb;
     int la; int lb; int lra; int lrb;
     ka=r*t*q*v-w*s*q*v;
     kb=p*s*t*v-u*s*t*q;
     kra=reda(ka,kb); krb=redb(ka,kb);
     la=r*krb*q-s*kra*p;
     lb=s*krb*q;
     lra=reda(la,lb); lrb=redb(la,lb);
     int xa; int xb; int xra; int xrb;
     int ya; int yb; int yra; int yrb;
     xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
     xb=q*v*krb*krb;
     xra=reda(xa,xb); xrb=redb(xa,xb);
     ya=-(kra*xra*lrb+krb*xrb*lra);
     yb=krb*xrb*lrb;
     yra=reda(ya,yb); yrb=redb(ya,yb);
     pg[i][0]=xra; qg[i][0]=xrb; rg[i][0]=yra; sg[i][0]=yrb;
    }
   }
  }
 }
 
  
 
 
  
 pg[0][0]=1; qg[0][0]=0; rg[0][0]=1; sg[0][0]=0;
 pg[1][0]=pp; qg[1][0]=qq; rg[1][0]=rr; sg[1][0]=ss;
 pg[0][1]=uu; qg[0][1]=vv;
 rgx=-ww*vv-a*uu*tt-b*vv*tt; sgx=tt*vv;
 rg[0][1]=reda(rgx,sgx); sg[0][1]=redb(rgx,sgx);
 
 i=0;j=0;
 for(j=0;j<=jj;j++){
  ph[i][j]=pg[i][j]; qh[i][j]=qg[i][j]; rh[i][j]=rg[i][j]; sh[i][j]=sg[i][j];
 }
 i=1;j=0;
 for(i=0;i<=ii;i++){
  ph[i][j]=pg[i][j]; qh[i][j]=qg[i][j]; rh[i][j]=rg[i][j]; sh[i][j]=sg[i][j];
 }
 
 i=1;j=1;
 
 for(i=1;i<=ii;i++){
  int k=1;
     for(k=1;k<=i;k++){
   ph[k][0]=pg[k][0]; qh[k][0]=qg[k][0]; rh[k][0]=rg[k][0]; sh[k][0]=sg[k][0];
  }
  for(j=1;j<=jj;j++){
   if(i%2==0 && j%2==0){
    p=ph[i/2][j/2]; q=qh[i/2][j/2]; r=rh[i/2][j/2]; s=sh[i/2][j/2];
    u=ph[i/2][j/2]; v=qh[i/2][j/2]; w=rh[i/2][j/2]; t=sh[i/2][j/2];
    if(p==1 && q==0 && r==1 && s==0){
     int xra=reda(u,v); int xrb=redb(u,v);
     int yra=reda(w,t); int yrb=redb(w,t);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
     int xra=reda(p,q); int xrb=redb(p,q);
     int yra=reda(r,s); int yrb=redb(r,s);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
     if(p==u && q==v && r==w && s==t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
      kb=2*r*q*q+a*p*s*q-b*s*q*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
      xb=q*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
     else if(p!=u || q!=v || r!=w || s!=t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=r*t*q*v-w*s*q*v;
      kb=p*s*t*v-u*s*t*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
      xb=q*v*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
    }
   }
  
  
  
   
   else if(i%2!=0 && j%2==0){   
    p=ph[(i+1)/2][j/2]; q=qh[(i+1)/2][j/2]; r=rh[(i+1)/2][j/2]; s=sh[(i+1)/2][j/2];
    u=ph[(i-1)/2][j/2]; v=qh[(i-1)/2][j/2]; w=rh[(i-1)/2][j/2]; t=sh[(i-1)/2][j/2];
    if(p==1 && q==0 && r==1 && s==0){
     int xra=reda(u,v); int xrb=redb(u,v);
     int yra=reda(w,t); int yrb=redb(w,t);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
     int xra=reda(p,q); int xrb=redb(p,q);
     int yra=reda(r,s); int yrb=redb(r,s);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
     if(p==u && q==v && r==w && s==t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
      kb=2*r*q*q+a*p*s*q-b*s*q*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
      xb=q*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
     else if(p!=u || q!=v || r!=w || s!=t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=r*t*q*v-w*s*q*v;
      kb=p*s*t*v-u*s*t*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
      xb=q*v*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
    }
   }
 
 
 
   else if(i%2==0 && j%2!=0){   
    p=ph[i/2][(j+1)/2]; q=qh[i/2][(j+1)/2]; r=rh[i/2][(j+1)/2]; s=sh[i/2][(j+1)/2];
    u=ph[i/2][(j-1)/2]; v=qh[i/2][(j-1)/2]; w=rh[i/2][(j-1)/2]; t=sh[i/2][(j-1)/2];
    if(p==1 && q==0 && r==1 && s==0){
     int xra=reda(u,v); int xrb=redb(u,v);
     int yra=reda(w,t); int yrb=redb(w,t);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
     int xra=reda(p,q); int xrb=redb(p,q);
     int yra=reda(r,s); int yrb=redb(r,s);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
     if(p==u && q==v && r==w && s==t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
      kb=2*r*q*q+a*p*s*q-b*s*q*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
      xb=q*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
     else if(p!=u || q!=v || r!=w || s!=t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=r*t*q*v-w*s*q*v;
      kb=p*s*t*v-u*s*t*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
      xb=q*v*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
    }
   }
   
 
      
   else if(i%2!=0 && j%2!=0){
    p=ph[(i-1)/2][(j+1)/2]; q=qh[(i-1)/2][(j+1)/2]; r=rh[(i-1)/2][(j+1)/2]; s=sh[(i-1)/2][(j+1)/2];
    u=ph[(i+1)/2][(j-1)/2]; v=qh[(i+1)/2][(j-1)/2]; w=rh[(i+1)/2][(j-1)/2]; t=sh[(i+1)/2][(j-1)/2];
    if(p==1 && q==0 && r==1 && s==0){
     int xra=reda(u,v); int xrb=redb(u,v);
     int yra=reda(w,t); int yrb=redb(w,t);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u==1 && v==0 && w==1 && t==0)){
     int xra=reda(p,q); int xrb=redb(p,q);
     int yra=reda(r,s); int yrb=redb(r,s);
     if(xrb==1 && yrb==1){
      printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
     }
     else if(xrb!=1 || yrb!=1){
      printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
     }
     ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
    }
    else if((p!=1 || q!=0 || r!=1 || s!=0)&&(u!=1 || v!=0 || w!=1 || t!=0)){ 
     if(p==u && q==v && r==w && s==t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=-a*r*q*q+3*p*p*s+2*c*p*s*q+d*s*q*q;
      kb=2*r*q*q+a*p*s*q-b*s*q*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*kra*kra+a*kra*q*krb-c*q*krb*krb-2*p*krb*krb;
      xb=q*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
     else if(p!=u || q!=v || r!=w || s!=t){
      int ka; int kb; int kra; int krb;
      int la; int lb; int lra; int lrb;
      ka=r*t*q*v-w*s*q*v;
      kb=p*s*t*v-u*s*t*q;
      kra=reda(ka,kb); krb=redb(ka,kb);
      la=r*krb*q-s*kra*p;
      lb=s*krb*q;
      lra=reda(la,lb); lrb=redb(la,lb);
      int xa; int xb; int xra; int xrb;
      int ya; int yb; int yra; int yrb;
      xa=q*v*kra*kra+a*kra*q*v*krb-c*q*v*krb*krb-p*v*krb*krb-u*q*krb*krb;
      xb=q*v*krb*krb;
      xra=reda(xa,xb); xrb=redb(xa,xb);
      ya=-(kra*xra*lrb+krb*xrb*lra);
      yb=krb*xrb*lrb;
      yra=reda(ya,yb); yrb=redb(ya,yb);
      if(xrb==1 && yrb==1){
       printf("*** The point [%d]P+[%d]Q is (%d, %d) ***\n", i,-j,xra,yra);
      }
      else if(xrb!=1 || yrb!=1){
       printf("The point [%d]P+[%d]Q is (%d/%d, %d/%d)\n", i,-j,xra,xrb,yra,yrb);
      }
      ph[i][j]=xra; qh[i][j]=xrb; rh[i][j]=yra; sh[i][j]=yrb;
     }
    }
   }
  }
 } 
 return 0;
}

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2009-09-09 21:07)
标签:

杂谈

内涵请自己挖掘……

 

-3   -10   -42  -142  -375  -805 -1431 -2056 -2055     1
-2    -7   -32  -100  -233  -430  -626  -625     1  2056
 0    -5   -25   -68  -133  -197  -196     1   626  2055
 1    -5   -20   -43   -65   -64     1   197   625  1429
 0    -6   -15   -23   -22     1    65   196   428   804
-2    -6    -9    -8     1    23    64   131   232   376
-3    -4    -3     1     9    22    41    67   101   144
-2    -1     1     4     8    13    19    26    34    43
 0     1     2     3     4     5     6     7     8     9
 1     1     1     1     1     1     1     1     1     1

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2009-05-13 20:32)
标签:

数学

概率

杂谈

概率论课上提出的问题:

坛子内有b只黑球和r只红球(b,r>=0,不全为0)

每一次闭眼从坛子中摸一个球,然后放回。

之后往坛子中加入a个与此球颜色相同的球 和c个与此球颜色相异的球(a,c>=0)

如此下去,问,第n(n>=1)次摸到黑球的概率P_n=?


答案:P_n=1/2+[(b-r)/2(b+r)]*product(1<=j<=n-1)[1-2c/(b+r+j(a+c))]

c=0时:P_n恒等于b/(b+r)

c>0时:利用调和级数的发散性,n-->infinity时,P_n-->1/2

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2009-05-13 20:25)
标签:

数学

统计

1.参考数据来源

water版精华区x-4-29 72-106      2009.03.18-2009.04.30

版面手工搜索id发文数            2009.05.01-2009.05.11

数据可能有偏差 但尚在可控制范围内

2.有关马甲发文数

仅计算我所知道的各人的马甲之发文数之和

3.数据导出

2009.03.18-04.20 05.01-05.11 每天都得到一个数据,共45个
2009.04.21-04.30             十天总共得到一个数据(不好处理 暂时忽略之)

数据记为A_0(十天之和的那个数据) A_1 ... A_45
          B_0 B_1 ...
          C_0 ...
          D_0 ...
          X_0 ...

X=amyroyas A=... B=... C=... D=...
  
4.计算方法

平均值/期望  EX=(X_1+...+X_45)/45 EA=(A_1+...+A_45)/45 ...
平方平均     EX^2=(X_1^2+...+X_45^2)/45 EA^2=(A_1^2+...A_45^2)/45 ...
方差         var(X)=EX^2-(EX)^2 ...
标准差       \sigma(X)=var(X)^0.5 ...
乘积期望     E(XA)=(X_1A_1+...X_45A_45)/45 ...
协方差       \sigma(X,A)=cov(X,A)=E(XA)-(EX)(EA) ...
相关系数     \rou(X,A)=[\sigma(X,A)]/[\sigma(X)][\sigma(A)] ...
最大值       max(X)=max{X_1,...,X_45} ...
最小值       min(X)=min{X_1,...,X_45} ...
极差         range(X)=max(X)-min(X) ...
...
       
...

5 Data Stat.

No.   Date       amyroyas        A         B         C          D   

00 0421-0430       439          572       421       325        52

01    0318         118          242       156        91         0       
02    0319         117          109        88        97         0        
03    0320          85           44       169       134         0    
04    0321          88           15        71       257        22
05    0322         128           37       108       261         0

06    0323          88           38        80        29         2
07    0324          30            7        30        53         0
08    0325          88           12        97        61         0
09    0326          66           88        43        89         0
10    0327          37           24        57       104         0

11    0328          50           24        39        52        23
12    0329          57           32        60       197         2
13    0330          55           33        50       135         1
14    0331          98           11        60       107         0
15    0401          72           83        14        26         2

16    0402          44           70        48        98         0
17    0403          41           40        97        32         1
18    0404         134            2       103       123         0
19    0405          65           13        34        47         0
20    0406          51           28        30        23         0

21    0407          19           24        55        32         0
22    0408          66          139        33         1         0
23    0409         127          175       185       221         0
24    0410         171          272        65        45        14
25    0411          74           52        94        33         2

26    0412         146          247       113        60         1
27    0413          85          209        78        22         0
28    0414          84           81        49       106         5
29    0415         201          152       254        33        18
30    0416          98          331       166       170        77

31    0417          60          217       115        62       129
32    0418         124           44        17        65        54
33    0419         109          155         0        26         0
34    0420          37           93        49       213        10
35    0501         151          158        32         1         0     

36    0502         108           50        36         4         0  
37    0503         200           54         7        41         0   
38    0504          18           79       104         0         0  
39    0505          32           11        14        72         0    
40    0506          59           39         4         1         0

41    0507          99           33        12        31         0  
42    0508         137           14        76       114         0
43    0509         109           35         4        86         1      
44    0510          72           40        19        79         0        
45    0511         115           91        48        20         0       

sum(·)           4013         3747      3063      3554       364
sum(·^2)       444585       604567    337587    483562     27164
sum(X·)           ---       392691    304979    320074     32803

E(·)            89.18        83.27     68.07     78.98      8.09
E(·^2)        9879.67     13434.82   7501.93  10745.82    603.64
E(X·)             ---      8726.47   6777.31   7112.76    728.96

var(·)        1926.99      6501.48   2868.86   4508.33    538.21
\sigma(·)       43.90        80.63     53.56     67.14     23.20

cov(X,·)          ---      1300.93    707.28     69.69     7.606   
\rou(X,·)         ---       0.3675    0.3008    0.0236    0.0075

max(·)            201          331       254       261       129
min(·)             18            2         0         0         0
range(·)          183          329       254       261       129

6.Temporary Results

           01-10    11-20    21-30    31-40   41-45

sumX         845      667     1071      898     532
   X^2     81079    51961   141165   111520   58860
   A         616      336     1682      900     213
   A^2     83932    17156   371126   119962   12391
   B         899      535     1092      378     159
   B^2     99153    35795   164726    29312    8601
   C        1176      840      723      485     330
   C^2    195924   100358    98289    60997   27994
   D          24       29      117      193       1
   D^2       488      539     6479    19657       1

        01-05  06-10  11-15  16-20  21-25  26-30  31-35  36-40  41-45    

sumXA   51105  11306  11893   7261  82215 123621  62670  20275  22345
   XB   63141  21423  15008  23631  44789  94566  15653   7844  18924
   XC   89501  19232  33612  26334  38878  42827  22646  10995  36049
   XD    1936    176   1463     41   2542  11730  14806      0    109

 

 

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2007-10-27 00:39)
 不成熟的想法一:

把行列式推广到空间是个什么情形?

譬如说行列式的值的定义为 D=sigma{[(-1)^(L(i1,i2,...,in)+L(j1,j2,...,jn)+L(k1,k2,...,kn))]*a(i1,j1,k1)*a(i2,j2,k2)*...*a(in,jn,kn)}

L(i1,i2,...,in)是逆序数

a(i,j,k)是行列式中坐标为(i,j,k)的数。



不成熟的想法二:

把行列式的值的定义改为  D=sigma{[z^(L(i1,i2,...,in))]*a(1,i1)*a(2,i2)*...*a(n,in)}


L(i1,i2,...,in)是逆序数

z是某个p次单位根,p是素数,p<=n。

a(i,j)是行列式中第i行j列的那个数。
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
 转个帖子 我先评论一下 三个字--太牛了!
 
 

一、问题分析

男生追女生,对男生来说最重要的是学习、爱情两不误。因此我们引进男生的学业成绩函数 Y(t) 。

首先,我们不考虑男生的追求攻势,则影响该函数的因素主要是两个人的关系程度。为了便于分析,我们将两人的关系简化为女生对该男生的疏远度,于是引入疏远度函数 X(t) 。

问题就转化为求解 Y(t) 和 X(t) 的相互作用关系。利用微分,很容易就可以求出两者的关系。但现实中男生可能会对该女生XXXXX的追求攻势,因此还要考虑到追求攻势对模型的影响。而追求攻势又与女生的疏远度有关,可以简化地将两者看成是正比关系。将追求攻势加入到模型中,就可以找出攻势与 Y(t) 和 X(t) 的关系了。

二、模型假设

1 、 t 时刻 A 君的学业成绩为 Y(t) ;

2 、 t 时刻 B 女对A 君的疏远度为 X(t) ;

3 、假设追求是同一个女生,即B女是同一个人,并且她不是歌星之类的人物;

4 、当 A 君没开始追求 B 女,B 女对 A 君的疏远度增长(平时发现的 A 君的不良行为)符合 Malthus 模型,即 dX/dt=aX(t) 其中 a 为正常数。

5 、当 Y(t) 存在时,单位时间内减少 X(t) 的值与 X(t) 的值成正比,比例常数为 b ,从而 dX(t)/dt=aX(t)-bX(t)Y(t) 。

6 、 A 君发起对 B 女追求后,立即转化为 B 女对 A 君的好感,并设定转化系数为 α,而随着的 A 君发起对 B 女的追求, A 君学业的自然下降率与学业成绩成正比,比例系数为 e 。于是有 dY(t)/dt= α bX(t)Y(t)-eY(t) 。

三、模型构成

由假设 5和假设 6 ,就得到了学业与疏远度在无外界干扰的情况下互相作用的模型:

{dX(t)/dt=aX-bXY ; dY(t)/dt=cXY-eY} 其中 c= α b.

(1) 这是一个非线性自治系统,为了求两个数 X 与 Y 的变化规律,我们对它作定性分析。令 {aX-bXY=0 ; cXY-eY=0} 解得系统 (1) 的两个平衡位置为: O(0,0) , M (e/c,a/b) 。从 (1) 的两方程中消去 dt ,分离变量可求得首次积分:

F(X,Y)=cX-dln|X|-aln|Y|=k

(2) 容易求出函数 F(X,Y) 有唯一驻点为 M(e/c,a/b) 。再用极值的充分条件判断条件可以判断 M 是 F 的极小值点。同时易见,当 X →∞( B 女对 A 君恨之入骨)或 Y →∞ ( A 君是一块只会学习的木头)时均有 F →∞;而 X → 0 ( A 君作了变形手术, B 女对他毫无防备)或 Y → 0 ( A 君不学无术,丝毫不学习)时也有 F →∞。由此不难看出,在第一象限内部连续的函数 z=F(X,Y) 的图形是以 M 为最小值点,且在第一卦限向上无限延伸的曲面,因而它与 z=k(k > 0) 的交线在相平面 XOY 的投影 F(X,Y)=k (k > 0,k取无穷) 是环绕点 M 的闭曲线簇。这说明学业成绩和疏远度的指数成周期性变化。

四、 结果解释

从生态意义上看这是容易理解的,由循环效应知,当 A 君的学习成绩 Y(t) 下降时, B 女会疏远 A 君,疏远度 X(t) 上升;于是 A 君就又开始奋发图强,学习成绩 Y(t) 又上升了。于是 B 女就又和 A 君开始了来往,疏远度 X(t) 又下降了。与 B 女交往多了,当然分散了学习时间, A 君的学习成绩 Y(t) 下降了。

然而我们可证明,尽管闭轨线不同,但在其周期内的 X 和 Y 的平均数量都分别是一常数,而且恰为平衡点 M 的两个坐标。事实上,由 (1) 的第二个方程可得: dY/Ydt=cX- e, 两端在一个周期时间 T 内积分,得:

∫ (dy/Ydt)dt=c ∮ Xdt-dT (3)

注意到当 t 经过一个周期 T 时,点 (X,Y) 绕闭轨线运行一圈又回到初始点,从而:∫ (dY/Ydt)dt= ∮ dY/Y=0 。所以,由 (3) 式可得: ( ∫ Xdt)/T=e/c 。

同理,由 (1) 的第一个方程可得: ( ∫ Ydt)/T=a/b 。

模型优化 考虑到追求攻势对上述模型的影响。设追求攻势与该时刻的疏远度成正比,比例系数为 h , h 反映了追求攻势的作用力。在这种情况下,上述学业与疏远度的模型应变为:

{dX/dT=aX-bXY-hX=(a-h)X-bXY ; dY/dt=cXY-eY-hY=cXY-(e+h)Y} (4)

将 (4) 式与 (1) 式比较,可见两者形式完全相同,前者仅是把 (1) 中 X 与 Y 的系数分别换成了 a-h 与 e+h 。因此,对 (4) 式有

x ' =( ∫ Xdt)/T=(e+h)/c , y ' =( ∫ Ydt)/t=(a-h)/b (5)

利用 (5) 式我们可见:攻势作用力 h 的增大使 X '增加, Y '减少。

我们的建议:考试期间,由于功课繁忙,使得追求攻势减少,即 h 减小,与平时相比,将有利于学业成绩 Y 的增长。这就是著名的Volterra 原理(竞争排他原理 competitive exclusion prin-ciple )!!!!!!切记切记!此原理对男生有着重要的指导意义:强大的爱情攻势有时不一定能达到满意的效果,反而不利与学业的成长;有时通过慢慢接触,慢慢了解,再加上适当的追求行动,女生的疏远度就会慢慢降低。学习成绩也不会降低!还有当成绩下降到一定程度时,一定要当机立断。因为你必须相信有些女孩是追不到的,不信你去追twins任何一个,你永远追不到。但是学习好与坏与你追女孩子的成功率成正比(这里是说你喜欢的那个,不喜欢的不在讨论中),所以你有理由相信你能追到你喜欢的,只要努力了。当然这是说一个女孩疏远你的时候,不好好学习,除非你做了变形手术,否则难成美事。祝君好运!

五.模型的推广及评价

由于模型的建立是为解决一种期望的结果,因此不仅是成绩对女生的疏远的关系,还可以是能力对疏远、money对疏远等都有效。广而推之,还可以是一个人想得到某种成功的期望。我们的优点是可以把模型推的更广,符合一般性,不足是一般人看不懂。

 
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

数学

数学生活

 最近去看了看DouDou的博客,他的博客里出现了我的链接,给我的注释是"仿佛看到三年前的自己,充满数学的生活真好 ^_^"
 
 正是这句话,让我想起了我的充满数学的生活,也正像DouDou说的那样,这种生活是很美好的。
 
 回忆一下这将近18年的生活吧~跟数学结下的缘分:
 
 1岁时:大概会数数了。
 
 3岁时:不知道怎么“研究”出一种方法,能够在短时间内算出某指定的一天是星期几,被众人夸奖。
 
 4岁时:研究出多位数的加法。
 
 5岁时:学会了3位数的乘法,天天拿着个粉笔在墙上做乘法运算。
 
 6岁时:意外看到了一本80年代的高考数学复习书,对里面出现的组合数C(n,k)
感到迷惑,不知为啥物。
 
 7岁时:看到了复数的一些理论,对i^2=-1之类的理论感到新奇但很快接受了。
 
 9岁时:很熟练的运用设未知数解题的方法,但被老师认为应该掌握算术解法,而不要老是用解方程的思想,因为那不是中国传统的方法。
 
 10岁时:轻松的解决了姐姐的初一的不等式问题(这个题本来是姐姐问我爸爸妈妈的,结果我抢先一步做出此题)。
 
 11岁时:为二次方程的理论而叫好,开始看关于圆的几何。
 
 12岁时:刚刚理解函数的概念。
 
 13岁时:拿着本很老的平面解析几何的书看,用平面解析几何的相关知识解决初中的函数题,还用解析法做平面几何题,让老师头晕。
 
 14岁时:暑假花了1个月看了微积分的理论,掌握了基本的求导求积分的内容。
10月拿到了全国高中联赛一等奖,让同学们惊讶。
 
 15岁时:投身竞赛而没有看更高深的数学书,不仅再次拿到了全国高中联赛一等奖,还参加了冬令营(CMO),可惜没考好。
 
 16岁时:仍然投身竞赛,不仅拿到了高中数学联赛的满分,还参加了冬令营(CMO),获得金牌。
 
 17岁时:参加国家队的选拔考试,差点以为进不了国家队而快要哭了。7月参加IMO,有点遗憾的只拿到银牌。开始看B.L. van der Waerden的代数学,再次向近代的前沿的数学靠拢。
 
 现在:拼命研究高等代数,有时也提高一下数学分析的水平。像DouDou说的那样,快乐的享受数学。
 
  总的回忆起来~~很快乐~~~~就是这个感觉!
 
 
 
 
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2007-10-18 22:59)
 行列式问题一:给定正整数N,一个N*N的行列式中,每个数都是0或者1,求这个行列式的值能取到的最大值?

 行列式问题一的推广1:给定正整数N,一个N*N的行列式中,每个数都是-1或者1,求这个行列式的值能取到的最大值?
 行列式问题一的推广2:给定正整数N和实数a,b,一个N*N的行列式中,每个数都是a或者b,求这个行列式的值能取到的最大值?

 

 行列式问题二(from 王立中):一个N*N的行列式中,第i行j列的数称为f(i,j),已知:若j=1,或j是i的正整数倍时f(i,j)=1,否则f(i,j)=0
证明:对任意实数k〉0.5,都存在自然数r,使行列式的值不超过r*(N^k)


阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2007-10-11 18:45)
 有限覆盖定理又称Heine-Borel定理,这几天有若干同学问我这个定理怎么证,现公布一下我知道的一种证法,分了七个步骤.其中给了每一步的提示,具体证明请自行补上.
 
 
 定理:[a,b]是个有界闭区间,I是一族开区间,若[a,b]可被I的并覆盖,则它可被I的有限子族覆盖。 
 
 首先记K={x是[a,b]中的元素:[a,x]可被I的有限子族所覆盖}
 
 1:K不是空集
 
 2:K有上界,因而有上确界,记M是K的上确界即M=sup K
 
 3: M是[a,b]中的元素
 
 4:对任意正数t,有:M-t是K中的元素
 
 5:有正数t及开区间族中的一个区间 I',使得[M-t,M]包含于I'
 
 6: 若M<b,则有正数s,使得M+s是K中的元素,因此M=b
 
 7: 由步骤4,5知M是K中的元素,又由M=b,知b是K中的元素,即:[a,b]可被I的有限子族覆盖。
 
 证完.

 

 
 
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2007-10-08 17:17)
 设p为奇素数,所谓表奇素数为平方和,就是说是否能将p写成x^2+y^2的形式。
 
其中x,y是整数。
 
 很显然若p为4k+3型奇素数,则不定方程p=x^2+y^2无x,y是整数的解,这个模4很容易看出。
 
 现在要证的结论是:若p为4k+1型奇素数,则不定方程p=x^2+y^2必有x,y为整数的解。
 
这个结论的证法很多,高斯和欧拉都有巧妙的证明。现在来看一种新的证法,如下:
 
 
 
准备工作:考虑集合S={(x,y,z):x,y,z是整数,x>0,y>0,并且p=4xy+z^2}.
 
它是一个有限集,因为其中x<p/4,y<p/4,所以只有有限个x,y值可以取,而且对给定的x,y,至多只有两个可能的z值.
 
 
第一部分:考虑一个线性映射: f:S--->S  , (x,y,z)--->(y,x,-z)
 
注意f是满足如下性质的:f·f是一个恒等映射,即对(x,y,z)作两次f,仍将得到自身。但是f没有不动点,因为z=0将导致p=4xy,这不可能。
 
设集合T={(x,y,z)是S中的元素,且z>0}.
 
      U={(x,y,z)是S中的元素,且(x-y)+z>0}.
 
注意:f将T映成S/T。因为f改变z的符号。
由于(x-y)+z=0将导致p=4xy+z^2=4xy+(x-y)^2=(x+y)^2,不可能。
所以f也改变(x-y)+z的符号。所以,f将U映成S/U。
 
观察上述映射f,我们得到:f把T和U都映成它的补集。所以f把T/U映成U/T,这说明集合U和T的元素个数相同。这就是我们第一部分的内容。
 
 
第二部分:考虑一个线性映射: g:U--->U  , (x,y,z)--->(x-y+z,y,2y-z)
 
首先检查一下这个映射g:若(x,y,z)是U中的元素,则x-y+z>0,y>0 并且4(x-y+z)y+(2y-z)^2=4xy+z^2,还有(x-y+z)-y+(2y-z)=x>0  所以g(x,y,z)是U中的元素。
 
  注意g是满足如下性质的:g·g是一个恒等映射,即对(x,y,z)作两次g,仍将得到自身。
 
  但是现在来看看g是否有不动点,若有不动点,则
               (x,y,z)=g(x,y,z)=(x-y+z,y,2y-z).
  此时将导致y=z,所以p=4xy+z^2=4xy+y^2=y(4x+y)。
   上式成立,必须y=1,x=(p-1)/4。因此如果g有不动点,则至多有一个。
 
  因为(p-1)/4是正整数,所以g恰好只有一个不动点,那么,U中的元素个数是奇数。
   这就是我们第二部分的内容。
 
 
 第三部分:考虑一个线性映射: h:T--->T  , (x,y,z)--->(y,x,z)
 
      这个映射显然是T到T上的映射。
  注意:h是满足如下性质的:h·h是一个恒等映射,即对(x,y,z)作两次h,仍将得到自身。
 
  如果U中的元素个数是奇数,那么T中的元素个数也是奇数,因为二者的基数相同。
  由于T中的元素个数是奇数,并且h·h是一个恒等映射,所以h必有不动点。
 
 设h的不动点是(x,y,z),则有:(x,y,z)=h(x,y,z)=(y,x,z).
      这导致x=y,于是p=4xy+z^2=4x^2+z^2=(2x)^2+z^2
 是两个正整数的平方和。
 
 这就说明了:若p为4k+1型奇素数,则不定方程p=x^2+y^2必有x,y为整数的解。
 证完。
 
 
 
 
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有