算法_趣味分数_Question5_列出真分数序列(java实现)

这篇文章讲述的是算法趣味分数部分的列出真分数序列问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。

问题描述

按递增顺序依次列出所有分母为40,分子小于40的最简分数。最简分数是分子、分母只有公因数1的分数叫最简分数或者说分子分母互质的分数是最简分数。

算法分析

  • 先穷举出分子的所有情况,再判断出每种情况是否满足条件:分子分母的最大公约数为1
  • 时间复杂度:O(n*log n) , 空间复杂度:O(1)

代码实现

package fraction;
/**
 * @author 叶清逸
 * @date 2018年7月28日下午9:57:52
 * @version 1.0
 * @project fraction
 */
public class Q5_TrueFractionSequence {
    /**
     * 问题描述:按递增顺序依次列出所有分母为40,分子小于40的最简分数。最简分数是分子、分母只有公因数1的分数叫最简分数或者说
     *          分子分母互质的分数是最简分数。
     * 
     * 算法分析:先穷举出分子的所有情况,再判断出每种情况是否满足条件:分子分母的最大公约数为1
     * 
     * 复杂度分析:时间复杂度:O(n*log n) , 空间复杂度:O(1)
     */
    public static void main(String[] args) {
        int num = 0 ;
        /*循环判断1-40每种情况是否符合要求*/
        for(int i=1 ; i<40 ; i++){
            /*辗转相除求出i和40的最大公约数*/
            int b = 40 ;
            int a = i ;
            while(b%a != 0){
                //k保存余数
                int k = b%a ;
                //除数变为
                b = a ;
                //被除数变为余数
                a = k ;
            }
            int gcd = a;
            /*若最大公约数为1则满足条件,输出*/
            if(gcd == 1){
                System.out.print(i+"/"+40+" ");
                num++ ;
                /*每8个换一行*/
                if(num%8 == 0)
                    System.out.println();
            }
        }
        System.out.println("共"+num+"个");
    }
}

样例输出

1/40 3/40 7/40 9/40 11/40 13/40 17/40 19/40 
21/40 23/40 27/40 29/40 31/40 33/40 37/40 39/40 
共16个

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/81266232
今日推荐