您的位置:首页 > 编程语言 > Java开发

常见小算法集合

2015-10-29 13:45 661 查看
在中型及大型公司面试过程中,通常都会涉及到一些算法的内容,掌握一些常见的基本算法,对于软件开发来说,其实是十分重要的,也是一种基本功。

1.判断质数

质数是除了被1和本身整除之外,再不能被其他整数整除的正整数。给定一个正整数,判断该整数是否是质数。下面给出实现代码:
/*
* 判定是否是质数
*/
public static boolean IsPrimeNumber(int n){
if(n ==2 || n==3) return true;
if(n%2 == 0) return false;
int i;
for(i=3; i<n/2; i+=2){
if(n%i==0) return false;
}
return true;
}2.求最大公约数和最小公倍数
最大公约数是几个数能被整除的最大数,最小公倍数是共同的最小倍数。

下面给出最大公约数的求法:

public class Math {
public static int getMaxDivide_ab(int a,int b){
if(a==0 || b== 0) {
System.out.print("arguments can not be 0");
return -1;
}
int value=1;
int max;
int min;
if(a==b){
return a;
}
if(a>b){
max=a;
min=b;
}else{
max=b;
min=a;
}
if(max%min==0) return min;
for(int i=2;i<min;i++){
if(0==max%i && 0==min%i){
value=i;
}
}
return value;
}
}这是使用循环的方式求取最大公约数,事实上还有一个非常有名的定理来求取最大公约数,即欧几里德定理:
若a和b的最大公约数为f(a,b),则f(a,b)=f(b,a%b)

有了这个定理,我们就可以采用地鬼的方式求取最大公约数

public class Math {
public static int oujilide(int a,int b){
if(a<b){
int temp;
temp=a;
a=b;
b=temp;
}
if(0==b){
return a;
}
return oujilide(b,a%b);
}
}有了最大公约数,最小公倍数就是a*b/f(a,b),所以最小公倍数的求法如下:
int lcm(int a, int b) //最小公倍数
{
return a * b / oujilide(a,b);
}3.分解质因数
分解质因数是将给定的数字分解成被整除的数相乘的形式,如145 = 5 * 29

public class Math {
public static void primeFactor(int n){
if(n<2) {
System.out.println("n must >= 2");
return;
}
int primeNumber = 2;// 定义最小的质数
System.out.print(n + " = ");
while (primeNumber <= n){
if (primeNumber == n) {// 当质数等于输入的数时,直接输出
System.out.print(n);
break;// 跳出循环

} else if (n % primeNumber == 0) {// 当输入的数与质数的余数为0时,输出这个质数

System.out.print(primeNumber + " * ");
n = n / primeNumber;// 把剩下的结果赋给num
} else {// 在余数不为0时,质数递增
primeNumber++;
}
}
}
}
4.测试
public class Hello {
public static void main(String[] args){

int n = 34555;
if(AlgorithmHelper.IsPrimeNumber(n))
System.out.println(n + " is prime number.");
else
System.out.println(n + " is not prime number.");

int a = 100;
int b = 50;
//int result = AlgorithmHelper.getMaxDivide_ab(a, b);
int result = AlgorithmHelper.oujilide(a, b);
System.out.println("max divide number of " + a + " and " + b + " is " + result);
System.out.println("min double number of " + a + " and " + b + " is " + a*b/result);

AlgorithmHelper.primeFactor(145);
}
}输出如下:
34555 is not prime number.
max divide number of 100 and 50 is 50
min double number of 100 and 50 is 100
145 = 5 * 295.总结
数据结构和算法是一个真正的程序员必须掌握的基础,面试的时候还是很考验一个人的逻辑思维能力的,每个人都需要掌握一些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 java