summaryrefslogtreecommitdiff
path: root/2.1/frac1.c
blob: 1901abc547141928beb89ef446ee33b62ce880bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
ID: mytbk921
LANG: C
TASK: frac1
*/

#include <stdio.h>
#include <stdlib.h>

struct rational
{
	int numer, denom;
};

int comp(const void *s, const void *t)
{
	const struct rational *r1 = (struct rational*)s;
	const struct rational *r2 = (struct rational*)t;
	return r1->numer*r2->denom - r2->numer*r1->denom;
}

int gcd(int x, int y)
{
	if (y==0)
		return x;
	else
		return gcd(y, x%y);
}

struct rational fracs[40000];
int nfrac;

int main()
{
	FILE *fin = fopen("frac1.in", "r");
	FILE *fout = fopen("frac1.out", "w");

	int N;
	int i, j;
	fscanf(fin, "%d", &N);
	fclose(fin);

	nfrac = 0;
	for (i=1; i<=N; i++) {
		for (j=1; j<i; j++) {
			if (gcd(i, j)==1) {
				fracs[nfrac].denom = i;
				fracs[nfrac].numer = j;
				nfrac++;
			}
		}
	}
	qsort(fracs, nfrac, sizeof(fracs[0]), comp);
	fprintf(fout, "0/1\n");
	for (i=0; i<nfrac; i++)
		fprintf(fout, "%d/%d\n", fracs[i].numer, fracs[i].denom);
	fprintf(fout, "1/1\n");
	return 0;
}