JAVA算法解析:从古典问题到素数检测

需积分: 16 0 下载量 135 浏览量 更新于2024-07-24 收藏 179KB DOC 举报
"JAVA算法42例" 在编程领域,算法是解决问题的核心,而Java作为一种流行的编程语言,常常被用于实现各种算法。以下是基于给定文件的三道Java算法实例的详细解析: 1. **斐波那契数列** 题目描述:计算斐波那契数列的前20项。斐波那契数列定义为:F(1) = 1, F(2) = 1, F(n) = F(n-1) + F(n-2) (n>=3)。程序通过递归和循环两种方式实现了这个功能。 - **递归实现**: ```java public static int f(int x) { if (x == 1 || x == 2) return 1; else return f(x - 1) + f(x - 2); } ``` - **循环实现**: 为了提高效率,通常避免使用递归,因为它可能导致大量的重复计算。可以使用动态规划存储之前计算过的值,减少重复计算。 ```java public static int fib(int n) { if (n <= 2) return 1; int[] fibArray = new int[n + 1]; fibArray[1] = fibArray[2] = 1; for (int i = 3; i <= n; i++) fibArray[i] = fibArray[i - 1] + fibArray[i - 2]; return fibArray[n]; } ``` 2. **素数判断** 题目描述:找出101到200之间的所有素数。素数是指大于1且除了1和它自身外没有其他正因数的自然数。程序通过遍历并检查每个数是否为素数来实现。 - **素数判断方法**: ```java public boolean isPrime(int x) { for (int i = 2; i <= Math.sqrt(x); i++) { if (x % i == 0) return false; } return true; } ``` - 这里使用了平方根的优化,因为一个非素数必定存在一个小于等于其平方根的因数。 3. **水仙花数** 题目描述:找到所有“水仙花数”。水仙花数是指一个三位数,其各位数字立方和等于该数本身,例如153(1^3 + 5^3 + 3^3 = 153)。 - **水仙花数的查找**: ```java public static void findNarcissisticNumbers() { for (int num = 100; num <= 999; num++) { int a = num / 100; int b = (num / 10) % 10; int c = num % 10; if (a * a * a + b * b * b + c * c * c == num) System.out.println(num); } } ``` - 这里通过将三位数分解为百位、十位和个位,然后分别计算它们的立方和来判断是否为水仙花数。 这些例子展示了基础算法的实现,包括递归、循环、数组、条件判断等,对于初学者来说是非常好的学习素材。通过这些实例,学习者可以逐步理解如何运用Java解决实际问题,同时提升编程思维和算法能力。