Ejercicio fibonacci de cuarto orden de java
Buenas tardes, mi duda es un ejercicio planteado en la universidad, llevo varios días tratando de resolverlo de manera optima y es este:
1.- Cree la clase correspondiente que pueda manejar los métodos no estáticos siguientes:
a) Si el valor pertenece a la serie 1, 1, 2, 4, 8, 15, 29....
b) Valor primo del valor perteneciente a la serie.
c) Valor que culmina en 7 perteneciente a la serie.
d) Valores que inicien en 6 perteneciente a la serie.
e) Calcule la media respectiva de la sumatoria total.
f) Con el valor invertido de la sumatoria total, determine si esta es un numero primo.
Prueba la clase construida creando una aplicación denominada EjecutaClase
variando los números impares según la siguiente sucesión (1 + 3 + 5 + ... 2n-1)
1) Obtenga la sumatoria y por cada una de ellas ejecute los métodos desarrollados, exceptuando la media ya que la misma se debe hacer al culminar la sumatoria. Comprobar el programa con la suma de los primeros 150 números impares.
Este es el código diseñado por mi:
/*Esta es la clase principal*/
public class EjecutaClase {
public static void main(String[] args) {
opera obj = new opera ();
int num, resul = 0, suma = 0, n, total = 0;
for (num = 1; num <= 150; num += 2){
if (num == 11){
num --;
}
resul+= num;
if(resul > 1)
System.out.println(resul);
suma+= num;
n = obj.serie(suma);
if (n > 1){
System.out.println(" El numero pertenece a la serie " + suma);
obj.serie(num);
obj.serie(num);
obj.primo(num);
obj.termina_7(num);
obj.inicia_6(num);
}
total+= suma;
}
System.out.println(" La sumatoria es: " + total);
System.out.println(" La media es: " + total/num);
System.out.print(" Total invertido es: " );
obj.voltear(total);
}
}
/*Clase con los métodos llamados*/
public class opera {
public int serie (int num) {
int a = 0, b =0, c = 1, d = 1, e;
for (num = 0; num <= 150; num ++){
e = a + b + c+ d;
a = b;
b = c;
c = d;
d = e;
}
return b;
}
public void primo (int num){
int div = 2;
for (div = 2; div <= num; div ++){}
if (div == num)
System.out.println(" El numero es primo ");
else
System.out.println(" El numero no es primo ");
}
public void termina_7 (int num){
while (num >= 10){
num = num % 10;
}
if (num == 7)
System.out.println(" El numero termina en 7 ");
else
System.out.println(" El numero no termina en 7 ");
}
public void inicia_6 (int num){
while (num >= 10){
num/= 10;
}
if (num == 6)
System.out.println (" El numero inicia en 6 ");
else
System.out.println (" El numero no inicia en 6 ");
}
public void voltear (int num){
int dig, inv = 0;
while (num > 0){
dig = num % 10;
num/= 10;
inv = inv * 10 + dig;
System.out.print(inv);
}
}
}
El ejercicio corre, pero no cumple exactamente con los métodos que cree, si alguien me puede dar una mano, se los agradecería mucho, ya me tiene loco. Si hay algún mal uso, algún código que sobre, etc, o como optimizarlo.