(Problem 73)Counting fractions in a range

Consider the fraction, n/d, where n and d are positive integers. If nd and HCF(n,d)=1, it is called a reduced proper fraction.

If we list the set of reduced proper fractions for d  8 in ascending order of size, we get:

1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8

It can be seen that there are 3 fractions between 1/3 and 1/2.

How many fractions lie between 1/3 and 1/2 in the sorted set of reduced proper fractions for d  12,000?

题目大意:

考虑分数 n/d, 其中n 和 d 是正整数。如果 nd 并且最大公约数 HCF(n,d)=1, 它被称作一个最简真分数。

如果我们将d  8的最简真分数按照大小的升序列出来,我们得到:

1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8

可以看出1/3和1/2之间共有3个分数。

在d  12,000的升序真分数列表中,1/3和1/2之间有多少个分数?

//(Problem 73)Counting fractions in a range

// Completed on Wed, 19 Feb 2014, 16:34

// Language: C11

//

// 版权所有(C)acutus   (mail: [email protected]) 

// 博客地址:http://www.cnblogs.com/acutus/



#include<stdio.h>

#define N 12000



int gcd(int a, int b)  //求最大公约数函数

{

    int r;

    while(b) {

        r = a % b;

        a = b;

        b = r;

    }

    return a;

}

 

void solve()

{

    int a, b, i, j, ans;

    ans = 0;

    for(i = 5; i <= N; i++) {

        a = i / 3;  b = i / 2;

        for(j = a + 1; j < b + 1; j++) {

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

                ans++;

        }

    }

    printf("%d\n", ans);

}

 

int main()

{

    solve();

    return 0;

}
Answer:
7295372

你可能感兴趣的:(action)