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 */
相关推荐
在编程领域,算法是解决问题的关键,本篇将讨论一些常见的简单算法,它们广泛应用于各种计算任务。以下是一些在C++编程中常用的数学函数和算法的详细解释: 1. **cmath库中的数学函数**: - `abs`: 计算一个数的...
本压缩包包含的资源专注于几个常见的排序算法,以及一个额外的获取最大子数组算法和优先队列算法。下面我们将详细探讨这些算法及其应用。 首先,让我们来讨论排序算法。排序算法有很多种类,每种都有其独特的特性和...
在本压缩包中,我们主要关注的是几种简单的算法,它们都是用C语言编写的,并且配合有HTML动画演示,帮助理解和学习。以下是这些算法的详细解释: 1. 插入排序(Insertion Sort) 插入排序是一种基础且直观的排序...
从给定的文件信息来看,标题“算法设计<几个基本的算法>”和描述“好不容易整理出来的 与大家一起分享了 大家踊跃下载把”,以及标签“算法 数据结构”,表明这是一个关于算法和数据结构的主题,可能包含了一些基础...
本文将基于"十几个经典算法研究(编程学习)"的主题,深入探讨这些算法的原理、应用及其对编程学习的重要性。 首先,算法是解决特定问题的一系列步骤,它可以是简单的算术运算,也可以是复杂的计算过程。在编程中,...
- Slope One是一种简单的协同过滤预测算法,它通过计算用户对物品的平均评分差来预测未知评分。具体来说,对于两个物品i和j,slope one会计算已知评分的平均差异,并用这个差异来预测用户对物品j的评分。 - 在Java...
本文将详细介绍几个适合初学者的常用算法源码,包括最大子段和、二叉树、全排列以及多边形游戏,旨在帮助初学者更好地掌握这些基本算法的应用和编程实现。 首先,我们来探讨最大子段和问题。该问题的目标是找出一个...
遗传过程包括以下几个步骤: 1. **初始化种群**:随机生成一组初始个体,形成第一代种群。 2. **计算适应度**:对每个个体,根据适应度函数计算其适应度值。 3. **选择操作**:依据适应度值,按照一定的选择策略...
在本压缩包中,我们可以看到一个名为"几个算法实现"的文件,这通常包含了一些常见的算法设计和实现,使用C++编程语言编写,并且带有注释。这些算法是计算机科学和信息技术领域的基础,对于理解和解决各种计算问题至...
本文将详细介绍标题和描述中提到的几个常见的加密算法,并结合标签“MD5”,“ROOT13”和“异或”来深入讨论。 首先,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,设计用于产生一个128位(16字节...
7. **哈密顿环路**:在图论中,哈密顿环路是指一个从某个顶点出发,经过图中所有其他顶点且最终回到起点的简单路径。寻找哈密顿环路是一个NP完全问题,可以利用各种启发式算法如遗传算法或蚁群算法来寻找近似解。 ...
本篇主要探讨几个在Java中常见的算法,这些算法在实际开发中有着广泛的应用。 1. **排序算法**:Java中实现排序有多种方式,如冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序等。其中,冒泡排序和选择...
在本文中,我们将深入探讨k-means算法的基本原理、实现过程以及一个简单的源码实例。 一、k-means算法概述 k-means算法的目标是将数据集分为k个不同的簇(cluster),每个簇内的数据点尽可能相似,而不同簇之间的...
在分析和实现Prim算法时,需要注意以下几点: 1. 初始化:正确设置初始状态,例如选择一个顶点作为起点,并确保所有其他顶点与树的连接权重都被正确记录。 2. 更新机制:在每一轮迭代中,确保能有效地更新到当前最小...
这里我们将探讨几种常见的最短路径算法,并且会提及如何用C#来实现它们。 1. **Dijkstra算法**:由艾兹格·迪科斯彻提出的Dijkstra算法是最常用的解决单源最短路径问题的方法。它通过维护一个优先队列(通常是二叉...
在给定的压缩包文件中,包含了几种不同的排序算法实现,包括基数排序(Radix Sort)、快速排序(Quick Sort)、随机化快速排序(Randomized Quick Sort)、计数排序(Counting Sort)以及插入排序(Insertion Sort)...
文件"三边交换简单算法"可能包含了关于如何实现这种算法的详细步骤、代码示例,或者是对该算法的进一步解释。通过阅读和理解这份文件,你可以更好地掌握三边交换法求解哈密顿回路的精髓,并将其应用于实际的图论问题...
这个数列的前几项是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... #### 三、代码分析与改进 给定的Java代码实现了一个特殊的递归算法来生成斐波那契数列的前n项,但其实现方式并非标准的递归,而是采用了循环结构。下...
本文通过几个简单的算法示例来阐述算法的设计和实现。 首先,我们来看【例2.1.1】,这是一个求1×2×3×4×5乘积的问题。原始方法是逐个相乘,虽然能得到正确结果,但效率低下。改进的算法利用了循环结构,设置两个...
本文将深入探讨这两种算法,并基于对十几个目标函数的比较,分析GWO相对于PSO的优势。 首先,让我们理解一下这两种算法的基本原理。PSO算法受到鸟群和鱼群的行为启发,每个粒子代表可能的解决方案,它们在搜索空间...