您的位置:首页 > 产品设计 > UI/UE

toj 2798 Farey Sequence

2009-05-15 17:15 218 查看
Farey Sequence

Time Limit: 3.0 Seconds Memory Limit: 65536K Multiple test files

The Farey Sequence Fn for any integer n with n ≥ 2 is the set of irreducible rational numbers a/b with 0 < a < b ≤ n and gcd(a,b) = 1 arranged in increasing order. The first few are
F2 = {1/2}

F3 = {1/3, 1/2, 2/3}

F4 = {1/4, 1/3, 1/2, 2/3, 3/4}

F5 = {1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5}
Now, your task is to print Farey Sequence given the value of n.

Input

There are several test cases. The first line is an integer giving the number of cases. Each test case has only one line, which contains a positive integer n.

Output

For each test case, you should output one line, which contains the corresponding Farey Sequence. Adjacent terms are separated by a single ',' and there can't be any white spaces in your output. See Sample Output for more clarifications on the output format.

Constraints

2 ≤ n ≤ 3000

Sample Input

4
2
3
4
5


Sample Output

1/2
1/3,1/2,2/3
1/4,1/3,1/2,2/3,3/4
1/5,1/4,1/3,2/5,1/2,3/5,2/3,3/4,4/5


Note

Do Not use cout to produce the output for this problem, since it is inefficient.

Source: The 5th UESTC Programming Contest

Problem ID in problemset: 2798

Submit Back Runs Statistics Clarifications

#include <iostream>

#include <queue>

using namespace std;

int t,n;

typedef struct node

{

short a,b;

float c;

node(){}

node(short aa,short bb,float cc)

{

a=aa;

b=bb;

c=cc;

}

friend bool operator <(node x,node y)

{

return x.c>y.c;

}

}Point;

priority_queue<Point>Q;

Point p;

int gcd (short a , short b)

{

if (b == 0)

return a;

return gcd (b , a % b);

}

int main()

{

short i,j;

scanf("%d",&t);

// int num = 0;

while(t--)

{

scanf("%d",&n);

printf("1/%d",n);

while(!Q.empty())

Q.pop();

for(i=1;i<=n-1;i++)

for(j=i+1;j<=n;j++)

{

if(i==1&&j==n)

continue;

if(gcd(i,j)==1)

{

Q.push(node(i,j,i*1.0/j));

// num ++;

}

}

while(!Q.empty())

{

p=Q.top();

Q.pop();

printf(",%d/%d",p.a,p.b);

}

//cout<<num<<endl;

printf("\n");

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: