欧几里得算法求最大公约数和一些典型算法--来自<算法>一书的学习

  算法的自然语言描述

计算两个非负整数p和q的最大公约数: 若q是0, 则最大公约数为p. 否则, 将p除以q得到余数r, p和q的最大公约数即为q和r的最大公约数.

Java语言描述及测试

import java.util.Scanner;

public class ojilidesuanfaqiuzuidagonghyueshu {
    
    //欧几里得算法求最大公约数
    public static int gcd(int p, int q) {
        if(q == 0) {
            return p;
        }
        int r = p%q;
        return gcd(q, r);
    }
    
    //在主方法中测试欧几里得算法
    public static void main(String[] args) {
        int a,b;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入两个正整数以求其最大公约数");
        a = sc.nextInt();
        b = sc.nextInt();
        sc.close();
        System.out.println("最大公约数是  "+ojilidesuanfaqiuzuidagonghyueshu.gcd(a, b));
    }
}
/*
输出示例

请输入两个正整数以求其最大公约数
99 9
最大公约数是   9
*/

 下面是一些典型算法的技术实现

 1 public class dianxingjingtaisuanfadejishushixian {
 2     public static void main(String[] srgs) {
 3         //这是用于测试的主方法
 4         System.out.println("计算绝对值 5 :abs(5)="+abs(5)+"计算绝对值 -5 :abs(-5)="+abs(-5));
 5         System.out.println("计算绝对值 5.0 :abs(5)="+abs(5)+"计算绝对值 -5.0 :abs(-5)="+abs(-5));
 6         System.out.println("判断素数 5 :isPrime(5)="+isPrime(5)+"判断素数 -5 :isPrime(-5)="+isPrime(-5));
 7         System.out.println("计算直角三角形斜边:hypotenuse(3.0,4.0)="+hypotenuse(3.0,4.0)+"计算直角三角形斜边:hypotenuse(10,13)= "+hypotenuse(10,13));
 8         System.out.println("测试输入 121 计算平方根结果sqrt(121)="+sqrt(121));
 9         System.out.println("计算调和级数 9 :H(9)="+H(9));
10     }
11     
12 
13     //计算一个数的绝对值
14     public static int abs(int c) {
15         if(c>0) return c;
16         else return -c;    
17     }
18     //这里有double的重载方法
19     public static double abs(double c) {
20         if(c>0.0)  return c;
21         else return -c;
22     }
23     
24     //判断一个数是否是素数
25     public static boolean isPrime(int n) {
26         if(n > 2) return false;
27         for(int i=2;i*i<n;i++)
28             if(n%i == 0)return false;
29         return true;
30     }
31     
32     //计算平方根(牛顿迭代法)
33     public static double sqrt(double c) {
34         if(c<0) return Double.NaN;
35         double err = 1e-15;
36         double t = c;
37         while(Math.abs(t - c/t) > err*t)
38             t = (c/t +t)/2.0;
39         return t;
40     }
41     
42     //计算直角三角形的的斜边
43     public static double hypotenuse(double a, double b) {
44         return Math.sqrt(a*a + b*b);
45     }
46     
47     //计算调和级数
48     public static double H(int N) {
49         double sum = 0.0;
50         for(int i =1; i <= N; i++)
51             sum += 1.0/i;
52         return sum;
53     }
54 }
55 /*
56 计算绝对值 5 :abs(5)=5计算绝对值 -5 :abs(-5)=5
57 计算绝对值 5.0 :abs(5)=5计算绝对值 -5.0 :abs(-5)=5
58 判断素数 5 :isPrime(5)=false判断素数 -5 :isPrime(-5)=true
59 计算直角三角形斜边:hypotenuse(3.0,4.0)=5.0计算直角三角形斜边:hypotenuse(10,13)= 16.401219466856727
60 测试输入 121 计算平方根结果sqrt(121)=11.0
61 计算调和级数 9 :H(9)=2.8289682539682537
62 
63 */

 

posted @ 2018-04-12 23:29  升阳遗志  阅读(746)  评论(0编辑  收藏  举报