斐波那契数和素数在一个系列中

时间:2019-07-12 05:31:07

标签: java algorithm primes fibonacci

我正在尝试为入学考试编写一些模拟问题,我遇到了这个问题,并且陷入了PRIME NUMBERS部分。

这是问题:

请考虑以下系列:1,2,1,3,2,5,3,7,5,11,8,13,13,17,…这个系列是2个系列的混合-所有奇数项在这个系列中形成一个Fibonacci系列,所有偶数项都是按升序排列的质数。编写程序以查找本系列中的第N个术语。例如,当N = 14时,序列中的第14个术语是17。因此,仅应打印值17。

public class OandF {
    // main
    public static void main(String[] args) {
        System.out.println(dofibo(9));

    }

    public static int dofibo(int m) {


        if(m == 0) {
            return 0;
        }
        if(m == 1) {
            return 1;
        }

        return dofibo(m-1) + dofibo(m-2);

    }


}
// as you can see this is where I got to, and I don't know how to proceed

3 个答案:

答案 0 :(得分:0)

有多种方法可以找到第n个质数,最简单的方法是不断对从1到n的质数进行计数。但这非常耗时,否则请参考费马定理或Eratosthenes筛。

private boolean isPrime(int n) {
    if (n == 2 || n == 3) return true;
    for(int i = 2; i < (int)Math.sqrt(n) + 1; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

public int nthPrime(int n) {
    int number, primeCount;
    for(number = 2, primeCount = 0; primeCount < n; number++) {
        if (isPrime(number)) {
            ++primeCount;
        }
    }
    return number;
}

答案 1 :(得分:0)

您可以尝试一下,它可能会解决您的问题。

class FibonacciExample1 {
 public static void main(String args[]) {
  int input = 20;
  fibonacci(input);
  System.out.print("-----------------------------");
  prime(input);
 }
 public static void fibonacci(int input) {
  int n1 = 0, n2 = 1, n3, i, count = input;
  System.out.print(n1 + " " + n2);

  for (i = 2; i < count; ++i) {
   n3 = n1 + n2;
   System.out.print(" " + n3);
   n1 = n2;
   n2 = n3;
  }
 }

 public static void prime(int input) {
  int i = 0;
  int num = 0;
  String primeNumbers = "";

  for (i = 1; i <= input; i++) {
   int counter = 0;
   for (num = i; num >= 1; num--) {
    if (i % num == 0) {
     counter = counter + 1;
    }
   }
   if (counter == 2) {
    primeNumbers = primeNumbers + i + " ";
   }
  }
  System.out.println(primeNumbers);
 }
}

答案 2 :(得分:0)

我将把这两个程序制作成更简单的,无限的生成器,以便于调试和排序:

import java.util.ArrayList;

class Fibonacci {

    int a = 0, b = 1;

    int next() {
        int c = a;

        a = b;
        b += c;

        return a;
    }
}

class Prime {

    ArrayList<Integer> primes = new ArrayList<>();

    int number = 2;

    int next() {

        if (number == 2) { // special case
            primes.add(number);
            number = 1;
            return 2;
        }

        outer: while (true) {
            number += 2;

            for (int divisor: primes) {

                if (divisor * divisor > number) {
                    break outer;
                }

                if (number % divisor == 0) {
                    break;
                }
            }
        }

        primes.add(number);
        return number;
    }
}

public class Example {

    public static int sequence(int n) {
        int nth = -1;

        if ((n % 2) == 0) {
            Fibonacci fibonacci_generator = new Fibonacci();

            for (int i = 0; i < (n / 2) + 1; i++) {
                nth = fibonacci_generator.next();
            }
        } else {
            Prime prime_generator = new Prime();

            for (int i = 0; i < (n + 1) / 2; i++) {
                nth = prime_generator.next();
            }
        }

        return nth;
    }

    public static void main(String args[]) {
        System.out.println(sequence(13));  // 14th element counting from zero
    }
}