class="java">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 */
?