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;
}


加载中…
添加到我的博客