java - 偶数位置应该有斐波那契,奇数位置应该有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
我们如何编写素数函数来填充奇数位置?
解决方案
您的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]);
推荐阅读
- javascript - 有没有办法将来自 React 中的 API 的响应值映射到一些预定值,然后确定渲染什么?
- tfs - 将 TFS 从 2015 更新 3 更新到 2015 更新 4
- c# - 错误“该进程无法访问文件'fileDir',因为它正被另一个进程使用。” 在尝试读取或写入文本文件时
- c - 函数指针处理程序
- amazon-web-services - S3 到 Redshift - 跨账户加密数据问题
- excel - 如何根据 Excel 单元格值搜索共享邮箱?
- azure-iot-sdk - Azure Sphere MT3620 稍后重试以发送到 IoT 中心
- cluster-computing - 我正在努力使用集群 nifi 进行负载平衡
- javascript - onClick 中的嵌套函数调用未触发
- docker - Nginx:根据位置通过HTTPS到不同的目标