Java 算法:求斐波那契数列中指定的第 n 个合数
Java 算法:求斐波那契数列中指定的第 n 个合数
斐波那契数列是一个形如下面的数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89……从第 3 项开始,有:f(n) = f(n - 1) + f(n - 2),在这个数列中,有些数是合数,比如 8、21、34 等,有些数是素数,比如 2、3、5、13 等。而前面两个 1 既不是合数也不是素数。下面请你求出该数列中指定的第 n 个合数。比如 n = 1 时,对应的数是 8;n = 2 时,对应的数是 21。
输入格式,一个正整数 n (1 ≤ n ≤ 30), 输出格式,一个正整数,在斐波那契数列中排第 n 位的合数
解题思路:
首先我们需要先求出斐波那契数列中第 n 个数的值,然后判断该数是否为合数,如果是,就记录下来。记录下来的合数的数量达到 n 个时,输出最后一个记录的合数即可。
判断一个数是否为合数,可以用试除法,从 2 开始到该数的平方根之间的每个整数都试除一遍,如果能整除,则该数为合数。
Java 代码:
import java.util.Scanner;
public class FibonacciCompositeNumber {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int count = 0;
int lastCompositeNumber = 0;
for (int i = 1; count < n; i++) {
int fibonacciNumber = fibonacci(i);
if (isComposite(fibonacciNumber)) {
count++;
lastCompositeNumber = fibonacciNumber;
}
}
System.out.println(lastCompositeNumber);
}
public static int fibonacci(int n) {
if (n <= 1) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
public static boolean isComposite(int number) {
if (number <= 1) {
return false;
}
for (int i = 2; i * i <= number; i++) {
if (number % i == 0) {
return true;
}
}
return false;
}
}
原文地址: https://www.cveoy.top/t/topic/jqa2 著作权归作者所有。请勿转载和采集!