Java中的常用算法

来源:互联网 发布:node formidable 编辑:程序博客网 时间:2024/05/22 15:51

1、求1到200之间的所有素数。

分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明不是素数,反之,是素数。

public class SuShu
{
 public static void main(String[] args)
 {
  /** 记录素数的个数 */
  int count = 0;
  for (int i = 101; i < 200; i += 2)
  {
   boolean b = false;
   for (int j = 2; j < Math.sqrt(i); j++)
   {
    if (i % j == 0)
    {
     b = false;
     break;
    }
    else
    {
     b = true;
    }

   }
   if (b == true)
   {
    count++;
    System.out.print(i + " ");
   }
  }
  System.out.println("素数的个数是:" + count);
 }
}

 

2、求水仙花数。

分析:水仙花数就是一个三位数,其各位数字立方和等于该数本身。

public class ShuiXianHua
{
 public static void main(String[] args)
 {
  int b1,b2,b3;
  for(int i=101;i<1000;i++){
   /**求百位数*/
   b1 = i/100;
   /**求十位数*/
   b2 = i%100/10;
   /**求个位数*/
   b3 = i%10;
   if((b1*b1*b1+b2*b2*b2+b3*b3*b3)==i){
    System.out.println(i+" 是水仙花数");
   }
  }
 }
}

 

3、求一个数的最大公约数和最小公倍数。

分析:

方法1:

在循环中,只要除数不为0,用较大的数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数就是最大公约数,最小公倍数为两数之积除以最大公约数。

public class GongYueAndGongBei
{
 public static void main(String[] args)
 {
  int a, b, m;
  Scanner scanner = new Scanner(System.in);
  System.out.println("请输入一个整数:");
  a = scanner.nextInt();
  System.out.println("请输入另一个整数:");
  b = scanner.nextInt();
  Deff df = new Deff();
  m = df.deff(a, b);
  int n = a * b / m;
  System.out.println("最大公约数是:" + m);
  System.out.println("最小公倍数是:" + n);
 }
}

class Deff
{
 public int deff(int x, int y)
 {
  int temp;
  if (x < y)
  {
   temp = x;
   x = y;
   y = temp;
  }
  while (y != 0)
  {
   if (x == y)
   {
    return x;
   }
   else
   {
    int k = x % y;
    x = y;
    y = k;
   }
  }
  return x;
 }
}

 

方法2:

辗除法

 

public class CommonDivisor
{
 public static void main(String[] args)
 {
  int temp = commonDivisor(4, 6);
  System.out.println("最小公倍数是:"+4*6/temp);
 }
 
 static int commonDivisor(int m,int n){
  if(m<0||n<0){
   System.out.println("error");
   return -1;
  }
  if(n==0){
   System.out.println("最大公约数是:"+m);
   return m;
  }
  return commonDivisor(n, m%n);
 }
}

 

方法3:

public class CandC
{
 public static void main(String[] args)
 {
  int temp = gcd(10, 20);
  System.out.println("最大公约数是:" + temp);
  System.out.println("最小公倍数是:" + 4 * 10 / temp);
 }

 public static int gcd(int m, int n)
 {
  while (true)
  {
   if ((m = m % n) == 0)
   {
    return n;
   }
   if ((n = n % m) == 0)
   {
    return m;
   }
  }
 }
}