几个简单算法

来源:互联网 发布:知乎 恐怖 编辑:程序博客网 时间:2024/05/29 03:39
1.求最大公约数的欧里几德算法:/** * 欧力几德 * @param m * @param n * @return */ private static int oula(int m,int n){ if(n==0)return m; int r=m%n; if(r==0){ return n; }else{ m = n; n = r; return oula(m, n); } } 2.求最大公约数的联系整数检查法/** * 连续整数检查法 * * @param m * @param n * @return */public static int gcd(int m,int n){int r = Math.min(m, n);for(;r>0;r--){if(m%r==0&&n%r==0){return r;}}return 0;} return 0; } 3.z质数判断:/** * 质数判断 * @param n * @return */ public static boolean isPrime(int n){ boolean flag = true; if(n==1) return false; if(n==2) return flag; for (int i = 2; i<= n/2; i+=2){     if(n%i == 0){     flag = false;         break;     } } return flag; } 4.斐波那契额数列三种求解:public static long m1(int n){if(n>1){long result = 1;do{result += m1(n-2);n--;}while(n>1);return result;}return n;}public static long m2(int n){if(n>1){long a=0,b=1;do{long tmp = b;b += a;a = tmp;}while(--n>1);return b;}return n;}public static long m3(int n){if(n>1){long a,b=1;n--;a = n&1;n /= 2;while(n-->0){a += b;b += a;}return b;}return n;} 5.求阶乘的两种算法:public static Integer F(int n){ if(n==0)return 1; if(n<=2&&;n>=1)return n; return F(n-1)*n; } //计算大数 public static BigInteger combination(int n){if(n==0)return new BigInteger("1");if(n<=2&&n>=1)return new BigInteger(n+"");int i=3;BigInteger b = new BigInteger("0");BigInteger tmp = new BigInteger("2");while(i<=n){b = tmp.multiply(new BigInteger(i+""));tmp = b;i++;}return b;} 6.附加一个算法计算题,求大神解答: /**小a和小b起初分别有A块钱和B块钱,它们决定玩一个游戏,游戏规则是扔一个硬币,如果结果是正面的话,小a要给小b C块钱。否则是反面的话,小b给小a D块钱。它们不断地扔硬币,直到某一次应该给钱的人拿不出那么多钱,就认为他破产输掉了。硬币不是均匀的,它以p1的概率产生正面,1 - p1的概率产生反面。请问小a最后胜利(也就是说小b破产输掉)的概率有多大?输入:A,B,C,D是整数,0<=A,B<50,0<=C,D<= 100,p1是浮点数 0<=p1<=1;输出:为保证输出的是整数,请输出小a获胜的概率乘以100后再下取整(直接截断后面的位数)的结果。例如,结果是0.125则输出12*/

0 0
原创粉丝点击