zoukankan      html  css  js  c++  java
  • toj 2798 Farey Sequence

       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 < bn 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;
    }
  • 相关阅读:
    Codeforces Round #365 (Div. 2) D
    Codeforces Round #414 C. Naming Company
    Codeforces Round #365 (Div. 2) B
    LA 6893 The Big Painting(矩阵Hash)
    Gym100783C Golf Bot(FFT)
    POJ 2481 Cows(树状数组)
    POJ 2352 Stars
    POJ 2299 Ultra-QuickSort(树状数组+离散化)
    LightOJ 1341 Aladdin and the Flying Carpet(唯一分解定理)
    LightOJ 1356 Prime Independence(质因数分解+最大独立集+Hopcroft-Carp)
  • 原文地址:https://www.cnblogs.com/forever4444/p/1457834.html
Copyright © 2011-2022 走看看