首页 > 解决方案 > 偶数位置应该有斐波那契,奇数位置应该有java中的素数

问题描述

import java.util.Scanner;

public class Nthterm {

    int k;

    public int fibonacci(int n) {
        int a = 0, b = 1, c;

        if (n == 0) {
            return b;
        }


        for (int i = 0; i <= n / 2; i++) {
            c = a + b;
            a = b;
            b = c;
        }

        return b;
    }

    public int prime(int n) {
        int result = 0;
        boolean isprime = true;
        for (int j = 2; j < n; j++) {
            if (n % j == 0) {
                isprime = false;
            }

        }
        if (isprime) {
            result = n;
        }

        return result;

    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("ENTER:");
        int k = sc.nextInt();
        Nthterm fib = new Nthterm();

        int[] arr1 = new int[k + 1];

        for (int n = 0; n <= k; n++) {

            if (n % 2 == 0) {
                arr1[n] = fib.fibonacci(n);
            } else {
                arr1[n] = fib.prime(n);

            }

        }
        for (int element: arr1) {
            System.out.println(element);
        }
    }
}

我已经编写了一个代码,如果 n 是偶数,它将调用斐波那契,如果 n 是奇数,它将初始化函数并将其存储在一个数组中。

但是 Prime 函数在第 9 位给出错误。

输出 :

输入:10 1 1 2 3 3 5 5 7 8 0 13

我们如何编写素数函数来填充奇数位置?

标签: java

解决方案


您的prime(int n)方法应该返回第 n 个素数。相反,它返回n如果n是素数并且0如果n不是素数。因此,0当您传递9给它时它会返回,因为9它不是素数。

似乎在每次连续调用prime()您都想获得下一个素数。因此,您可以更改prime()为返回大于 的下一个素数n

public int nextPrime(int n0) {
    int n = n0 + 1;
    boolean isPrime = false;
    while (!isPrime) {
        isPrime = true;
        for(int j = 2; j < n;j++) {
            if (n % j == 0) {
                isPrime = false;
                n++;
                break;
            }
        }
    }
    return n;
}

现在,而不是调用:

arr1[n]=fib.prime(n)

您应该致电:

arr1[n]= n < 2 ? fib.nextPrime(0) : fib.nextPrime(arr1[n-2]);

推荐阅读