Java求素数和最大公约数的简单代码示例

Java小例子:求素数
素数(质数)指的是不能被分解的数,除了 1 和它本身之外就没有其它数能够整除。这里是一个小例子,说明如何求取十万以内的所有素数。
 
素数的分布没有规律可言,所以要检验一个数是不是素数,就必须将它同所有小于它的数作除法。不过有一个简便的方法,就是不需要检验所有小于它的数,而只要检验所有小于它的素数。如果所有小于它的素数都不能将其整除,那么它就是素数。

public class Primes { 

  public static void main(String[] args) {
    // 求素数
    List<Integer> primes = getPrimes(100000); 

    // 输出结果
    for (int i = 0; i < primes.size(); i++) {
      Integer prime = primes.get(i);
      System.out.printf("%8d", prime);
      if (i % 10 == 9) {
        System.out.println();
      }
    }
  } 

  /**
   * 求 n 以内的所有素数
   *
   * @param n 范围
   *
   * @return n 以内的所有素数
   */
  private static List<Integer> getPrimes(int n) {
    List<Integer> result = new ArrayList<Integer>();
    result.add(2); 

    for (int i = 3; i <= n; i += 2) {
      if (!divisible(i, result)) {
        result.add(i);
      }
    } 

    return result;
  } 

  /**
   * 判断 n 是否能被整除
   *
   * @param n   要判断的数字
   * @param primes 包含素数的列表
   *
   * @return 如果 n 能被 primes 中任何一个整除,则返回 true。
   */
  private static boolean divisible(int n, List<Integer> primes) {
    for (Integer prime : primes) {
      if (n % prime == 0) {
        return true;
      }
    }
    return false;
  }
}


Java小例子:模拟分数的类 Fraction

这里是一个模拟分数运算的例子:Fraction 类。分数运算完后要用最大公约数除分子分母。所以这里也有个用辗转相除法求最大公约数的例子。另外在构造 Fraction 对象时如果分母为零将会抛出异常,这也是必要的检查。

public class FractionTest { 

  public static void main(String[] args) {
    Fraction a = new Fraction(7, 32);
    Fraction b = new Fraction(13, 32);
    System.out.println(a + " + " + b + " = " + a.add(b) + "(" + a.add(b).doubleValue() + ")");
    System.out.println(a + " - " + b + " = " + a.minus(b) + "(" + a.minus(b).doubleValue() + ")");
    System.out.println(a + " * " + b + " = " + a.multiply(b) + "(" + a.multiply(b).doubleValue() + ")");
    System.out.println(a + " / " + b + " = " + a.devide(b) + "(" + a.devide(b).doubleValue() + ")");
  }
} 

// 分数
class Fraction {
  private int numerator;   // 分子 

  private int denominator;  // 分母 

  Fraction(int numerator, int denominator) {
    if (denominator == 0) {
      throw new IllegalArgumentException("分母不能为 0");
    } 

    this.numerator = numerator;
    this.denominator = denominator;
    shrink();
  } 

  Fraction() {
    this(0, 1);
  } 

  public int getNumerator() {
    return numerator;
  } 

  public void setNumerator(int numerator) {
    this.numerator = numerator;
  } 

  public int getDenominator() {
    return denominator;
  } 

  public void setDenominator(int denominator) {
    this.denominator = denominator;
  } 

  // 分子分母同除以最大公约数
  private Fraction shrink() {
    int maxCommonDivisor = getMaxCommonDivisor(this.denominator, this.numerator);
    this.numerator /= maxCommonDivisor;
    this.denominator /= maxCommonDivisor;
    return this;
  } 

  // 辗转相除法求最大公约数
  private int getMaxCommonDivisor(int a, int b) {
    int mod = a % b; 

    if (mod == 0) {
      return b;
    } else {
      return getMaxCommonDivisor(b, mod);
    }
  } 

  // 分数加法
  public Fraction add(Fraction that) {
    return new Fraction(this.numerator * that.denominator + this.denominator * that.numerator,
        this.denominator * that.denominator);
  } 

  // 分数减法
  public Fraction minus(Fraction that) {
    return new Fraction(this.numerator * that.denominator - this.denominator * that.numerator,
        this.denominator * that.denominator);
  } 

  // 分数乘法
  public Fraction multiply(Fraction that) {
    return new Fraction(this.numerator * that.numerator,
        this.denominator * that.denominator);
  } 

  // 分数除法
  public Fraction devide(Fraction that) {
    return new Fraction(this.numerator * that.denominator,
        this.denominator * that.numerator);
  } 

  public double doubleValue() {
    return (double) numerator / denominator;
  } 

  @Override
  public String toString() {
    return String.format("{%d/%d}", this.numerator, this.denominator);
  }
}

运行输出:

{7/32} + {13/32} = {5/8}(0.625)
{7/32} - {13/32} = {-3/16}(-0.1875)
{7/32} * {13/32} = {91/1024}(0.0888671875)
{7/32} / {13/32} = {7/13}(0.5384615384615384)
(0)

相关推荐

  • java数学归纳法非递归求斐波那契数列的方法

    本文实例讲述了java数学归纳法非递归求斐波那契数列的方法.分享给大家供大家参考.具体如下: Integer能表示的最大值为 2147483647 大概是21.4亿,这里没有考虑溢出情况(当size为983时就会溢出)! import java.util.List; import java.util.ArrayList; /** * @author jxqlovejava * 斐波那契数列 */ public class Fibonacci { public static List<Intege

  • Java实现求小于n的质数的3种方法

    质数概念 质数,又称素数,指在一个大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数). 最小的素数是2,也是素数中唯一的偶数:其他素数都是奇数.质数有无限多个,所以不存在最大的质数. 一:根据定义去求解: 也是最笨的方式,效率比较低: package test.ms; public class FindPrime { // find the prime between 1 to 1000; public static void main(Str

  • 使用Java代码进行因数分解和求最小公倍数的示例

    因数分解 /* 因数分解是十分基本的数学运算,应用广泛.下面的程序对整数n(n>1)进行因数分解. 比如,n=60, 则输出:2 2 3 5.请补充缺失的部分. */ public class 因数分解 { public static void f(int n) { for (int i = 2; i < n / 2; i++) { while(n%i==0){ // 填空 System.out.printf("%d ", i); n = n / i; } } if (n

  • java求两个数中的大数(实例讲解)

    java中的max函数在Math中 应用如下: int a=34: int b=45: int ans=Math.max(34,45); 那么ans的值就是45. 以上这篇java求两个数中的大数(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • java 求解二维数组列最小值

    java 求解二维数组列最小值 比较二维数组列最小值,组成一个新数组返回. 实现核心算法,不需要使用IO 输入:{{5,6,1,16},{7,3,9}} 输出:{1,3} import java.util.Arrays; public class Col { public static int[] getColMin(int a[][]) { int[] res = new int[a.length]; for (int i = 0; i < a.length; i++) { int[] s =

  • java求最大公约数与最小公倍数的方法示例

    本文实例讲述了java求最大公约数与最小公倍数的方法.分享给大家供大家参考,具体如下: Gongyueshu.java文件: package math; public class Gongyueshu { public static void main(String[] args) { //从控制台输入两个数据 int m = Integer.parseInt(args[0]); int n = Integer.parseInt(args[1]); int y = 1 ; int b = 1;

  • Java中使用辗转相除法求最大公约数

    比较好用的是辗转相除法. 比如:49和91  a      b        temp 49  %  91  =  49 91  %  49  =  42 49  %  42  =  7 42  %  7    =  0 所以最大公约数就是7. public class T { public static void main(String[] args) { int gcd = gcd(91, 49); System.out.println(gcd); } /** * greatest comm

  • Java求字符串中出现次数最多的字符串以及出现次数

    金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出. 此题的解题思路如下: 引入TreeSet:通过集合快速找到所有出现过的字符串 引入ArrayList:为了快速排序,再通过StringBuffer生成排序后的字符串 通过String的indexOf方法和lastIndexOf方法来计算每个字符串出现的次数最大值 使用HashMap

  • Java求两个正整数的最大公约数和最小公倍数

    题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 程序分析:利用辗除法. 最大公约数: public class CommonDivisor{ public static void main(String args[]) { commonDivisor(24,32); } static int commonDivisor(int M, int N) { if(N<0||M<0) { System.out.println("ERROR!"); return -1; }

  • Java求素数和最大公约数的简单代码示例

    Java小例子:求素数 素数(质数)指的是不能被分解的数,除了 1 和它本身之外就没有其它数能够整除.这里是一个小例子,说明如何求取十万以内的所有素数.   素数的分布没有规律可言,所以要检验一个数是不是素数,就必须将它同所有小于它的数作除法.不过有一个简便的方法,就是不需要检验所有小于它的数,而只要检验所有小于它的素数.如果所有小于它的素数都不能将其整除,那么它就是素数. public class Primes { public static void main(String[] args)

  • Java实现判断浏览器版本与类型简单代码示例

    简单的Java获取浏览器版本和类型方法,不是很完美,但是可以用: 希望大家加以完善! public static void main(String[] args) { String agent=request.getHeader("User-Agent").toLowerCase(); System.out.println(agent); System.out.println("浏览器版本:"+getBrowserName(agent)); } public Str

  • Java编程异常简单代码示例

    练习1 写一个方法void triangle(int a,int b,int c),判断三个参数是否能构成一个三角形.如果不能则抛出异常IllegalArgumentException,显示异常信息:a,b,c "不能构成三角形":如果可以构成则显示三角形三个边长.在主方法中得到命令行输入的三个整数,调用此方法,并捕获异常. 两边之和大于第三边:a+b>c 两边之差小于第三边:c-a package 异常; import java.util.Arrays; import java

  • Java中闭包简单代码示例

    一.闭包的定义. 有很多不同的人都对闭包过进行了定义,这里收集了一些. # 是引用了自由变量的函数.这个函数通常被定义在另一个外部函数中,并且引用了外部函数中的变量. -- <<wikipedia>> # 是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域.-- <<Java编程思想>> # 是一个匿名的代码块,可以接受参数,并返回一个返回值,也可以引用和使用在它周围的,可见域中定义的变量.-- Groovy ['ɡru:vi] # 是一个表

  • Java编程Iterator迭代器设计原理及实现代码示例

    我们知道迭代器(Iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素.那么Iterator迭代器的设计原理是什么呢?迭代器问什么定义了一个借口,而不是一个类呢? 我们假设迭代器迭代数据的功能定义为了一个类,那么,会有这样的问题.不同的集合,由于数据结构不一样,所以他们的存储方式也是不一样的.也就是说,迭代器获取的时候,获取的方式是变化的,也就是不固定的.所以把这种方式定义为具体的实现是不合理的. 无论何种集合,他们肯定都有获取的功能,而且不知道什么时候就没有数据了.所有他

  • java多线程之线程同步七种方式代码示例

    为何要使用同步?  java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),     将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,     从而保证了该变量的唯一性和准确性. 1.同步方法  即有synchronized关键字修饰的方法.     由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,     内置锁会保护整个方法.在调用该方法前,需要获得内置锁,否则就处于阻塞状态.     代码

  • java数据结构之树基本概念解析及代码示例

    Java中树的存储结构实现 一.树 树与线性表.栈.队列等线性结构不同,树是一...节点与节点之间的父子关系,可以为每个节点增加一个parent域,用以记录该节点的父点 树是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点组成一个具有层次关系的集合.把 它叫做"树"是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的. 树定义和基本术语 定义 树(Tree)是n(n≥0)个结点的有限集T,并且当

  • Java语言Consistent Hash算法学习笔记(代码示例)

    本文研究的主要是ConsistentHashing算法代码. 一致性哈希(Consistent Hash) 协议简介 一致性哈希算法在1997年由麻省理工学院提出(参见0),设计目标是为了解决因特网中的热点(Hot pot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用. 哈希算法 一致性哈希提出了在动态变化的Cache环境中,哈希算法应该满足的4个适应条件: 平衡性(Balance) 平衡性是指哈希的结果能够尽可能分

  • Java并发之条件阻塞Condition的应用代码示例

    本文研究的主要是Java并发之条件阻塞Condition的应用示例代码,具体如下. Condition将Object监视器方法(wait.notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意Lock实现组合使用,为每个对象提供多个等待 set(wait-set).其中,Lock 替代了synchronized方法和语句的使用,Condition替代了Object监视器方法的使用. 1. Condition的基本使用 由于Condition可以用来替代wait.no

  • Java编程小实例—数字时钟的实现代码示例

    本文的实例是Java编程实现一个数字时钟,代码测试可用,练练手吧.代码如下: package me.socketthread; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.Calendar; import java.util.GregorianCalenda

随机推荐