Java算法实践:斐波那契数列、素数判断与水仙花数

需积分: 9 1 下载量 152 浏览量 更新于2024-09-12 收藏 49KB TXT 举报
本文将介绍三个Java编程中的经典算法问题,这些问题涵盖了斐波那契数列、寻找质数以及判断水仙花数。通过理解和实践这些算法,可以加深对Java编程和基础算法的理解。 1. 斐波那契数列: 斐波那契数列是一个非常经典的数列,它的定义是:第一项和第二项都是1,之后的每一项都是前两项之和。在Java代码中,我们可以使用循环结构来计算斐波那契数列的前15个月的兔子数量。这段代码展示了如何初始化两个变量f1和f2分别代表斐波那契序列的前两项,然后通过循环计算后面的项并打印结果。这里的算法时间复杂度是O(n),其中n为斐波那契数列的项数。 ```java public class FirstRabbit { public static final int MONTH = 15; public static void main(String[] args) { long f1 = 1L, f2 = 1L; long f; for (int i = 3; i < MONTH; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.print(i + "个月的兔子数量: "); System.out.println(f2); } } } ``` 2. 寻找质数: 寻找101到200之间的所有质数是另一个常见的算法问题。这段代码首先定义了一个变量count来记录找到的质数数量,然后遍历101到200的整数,对于每个数,通过判断它是否能被2到其平方根之间的任何数整除来确定是否为质数。如果不能被整除,就将该数输出并增加计数。这个算法的时间复杂度大约是O(n * sqrt(n)),因为需要遍历n个数,并对每个数进行sqrt(n)次除法操作。 ```java public class SecondPrimeNumber { public static int count = 0; public static void main(String[] args) { for (int i = 101; i < 200; i++) { boolean b = true; // 默认假设是质数 for (int j = 2; j <= Math.sqrt(i); j++) { if (i % j == 0) { b = false; // 如果找到因子,则不是质数 break; } } if (b) { count++; System.out.print(i + ""); } } System.out.println("\n共找到" + count + "个质数"); } } ``` 3. 水仙花数( narcissus number): 水仙花数是指一个三位数,其各位数字立方和等于它本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。这段代码通过遍历101到999的整数,对每个数进行转换并计算其各位数字的立方和,如果相等则输出该数。这个算法的时间复杂度为O(n),因为只需要遍历n个数。 ```java public class ThirdNarcissusNum { static int b, bb, bbb; public static void main(String[] args) { for (int num = 101; num < 1000; num++) { ThirdNarcissusNum tnn = new ThirdNarcissusNum(); tnn.f(num); } } public void f(int m) { bbb = m / 100; bb = (m % 100) / 10; b = m % 10; if (bbb * bbb * bbb + bb * bb * bb + b * b * b == m) { System.out.println("水仙花数:" + m); } } } ``` 以上三个算法实例展示了在Java中如何处理基础的数学问题。通过理解和实践这些代码,开发者可以提升对Java语言特性和算法应用的掌握。同时,它们也为解决更复杂的编程问题奠定了基础。