import settings;
import graph;
import math;
pdfviewer="/usr/bin/evince";
psviewer="evince";
// parameters
int num=10;
int gcd(int a,int b){
if(b==0){
return a;
}else{
return gcd(b,a-quotient(a,b)*b);
}
}
bool isPrimeWith(int a,int b){
return gcd(a,b)==1;
}
// schema representing the addition of N1 + N2
pen color_rational(int x,int y){
if(y==0){
return white;
}else{
real ratio = x
/y;
return rgb(0.5*(1+ratio),0.7*(1+ratio),0.3*(1-ratio));
}
}
unitsize(2,2);
picture damier;
// unitsize(damier,1,1);
size(damier,5000,5000,(-100,-100),(100,100));
dot(damier,(0,0));
dot(damier,(-num,-num),invisible);
dot(damier,(num,num),invisible);
for(int x=-num; x<=num;++x){
for(int y=-num; y<=num;++y){
pen p=color_rational(x,y);
if(y>0){
pair far;
if(isPrimeWith(abs(x),abs(y)) ){
far=(x*100,y*100);
drawline(damier,(0,0),far,p);
}
}
if(y==0){
dot(damier,(x,y));
dot(damier,(x,y),rgb(0.9,0.9,0.9));
}else
dot(damier,(x,y),p);
}
}
dot(damier,(0,0));
dot(damier,(0,0),rgb(0.9,0.9,0.9));
add(damier.fit(),(0,0));
// drawing the equivalent classes