/*
ID: lucien23
PROG: frac1
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct Fraction
{
int numerator;
int denominator;
Fraction(){}
Fraction(int x, int y)
{
numerator = x;
denominator = y;
}
} Fraction;
bool isPrimes(int x, int y);
bool compFrac(Fraction frac1, Fraction frac2)
{
if (frac1.numerator/(double)frac1.denominator < frac2.numerator/(double)frac2.denominator)
{
return true;
}
return false;
}
int main()
{
ifstream infile("frac1.in");
ofstream outfile("frac1.out");
if(!infile || !outfile)
{
cout << "file operation failure!" << endl;
return -1;
}
int N;
infile >> N;
vector<Fraction> fractions;
fractions.push_back(Fraction(0, 1));
fractions.push_back(Fraction(1, 1));
for (int i=1; i<=N; i++)
{
for (int j=1; j<i; j++)
{
if (isPrimes(j, i))
{
fractions.push_back(Fraction(j, i));
}
}
}
sort(fractions.begin(), fractions.end(), compFrac);
for (vector<Fraction>::iterator it=fractions.begin(); it!=fractions.end(); it++)
{
outfile << it->numerator << "/" <<it->denominator << endl;
}
return 0;
}
/*
*推断两数是否互质
*/
bool isPrimes(int x, int y)
{
for (int i=2; i<=x; i++)
{
if (x%i == 0 && y%i == 0)
{
return false;
}
}
return true;
}