Java算法实践:斐波那契数列、素数判断与水仙花数
需积分: 9 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语言特性和算法应用的掌握。同时,它们也为解决更复杂的编程问题奠定了基础。
2023-09-01 上传
2023-08-11 上传
2011-05-16 上传
2023-11-10 上传
2023-09-11 上传
2023-08-26 上传
2023-04-19 上传
2023-09-18 上传
2024-02-05 上传
_强哥_
- 粉丝: 0
- 资源: 7
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析