在中型及大型公司面试过程中,通常都会涉及到一些算法的内容,掌握一些常见的基本算法,对于软件开发来说,其实是十分重要的,也是一种基本功。
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.总结
数据结构和算法是一个真正的程序员必须掌握的基础,面试的时候还是很考验一个人的逻辑思维能力的,每个人都需要掌握一些。