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;
    }
}
Java 算法:求斐波那契数列中指定的第 n 个合数

原文地址: https://www.cveoy.top/t/topic/jqa2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录