project euler 73

来源:互联网 发布:图书馆借阅源码 php 编辑:程序博客网 时间:2024/06/05 21:01

Problem 73


Counting fractions in a range

Consider the fraction, n/d, where n and d are positive integers. If n < d 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均为正整数。如果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之间有多少个分数?

package projecteuler;import junit.framework.TestCase;public class Prj73 extends TestCase {private static final int UP_LIMIT = 12000;public void testCountingFractionsInARange(){System.out.println(between(1, 3, 1, 2, UP_LIMIT));}int between(int n1, int d1, int n2, int d2, int limit) {if (d1 + d2 > limit) {return 0;}return 1 + between(n1 + n2, d1 + d2, n2, d2, limit)+ between(n1, d1, n1 + n2, d1 + d2, limit);}}


0 0