/* ID:chenjiong PROG:frac1 LANG:C++ */ #include <stdio.h> #include <string.h> const int MAXN = 160; typedef struct { int x; int y; }FRAC; int N; FRAC table[MAXN * MAXN / 2]; int cnt; int gcd(int a,int b) { // a >= b if ( b == 0 ) return a; else return gcd(b,a % b); } void generate() { int i,j; for ( i = 1; i <= N; i++) { for ( j = 0; j <= i; j++) { if ( gcd(i,j) == 1 ) { table[cnt].x = j; table[cnt].y = i; cnt++; } } } } int cmp(FRAC p,FRAC q) { return p.x * q.y - q.x * p.y; } void swap(FRAC& a,FRAC& b) { FRAC t = a; a = b; b = t; } void bubble_sort() { int i,j; for ( i = 1; i <= cnt - 1; i++) { for ( j = 0; j <= cnt - 1 - i; j++) { if ( cmp(table[j],table[j + 1]) > 0 ) swap(table[j],table[j + 1]); } } } int main() { freopen("frac1.in","r",stdin); freopen("frac1.out","w",stdout); scanf("%d",&N); generate(); bubble_sort(); int i; for ( i = 0; i < cnt; i++) printf("%d/%d\n",table[i].x,table[i].y); return 0; }