Número de sumas consecutivas error?
Estoy trabajando en un programa que toma un número entero y encuentra el número de combinaciones de sumas consecutivas que tiene el número entero:
El número 13 puede expresarse como una suma de enteros positivos consecutivos 6 + 7. Catorce pueden expresarse como 2 + 3 + 4 + 5, también una suma de enteros positivos consecutivos. Algunos números se pueden expresar como una suma de enteros positivos consecutivos en más de una forma. Por ejemplo, 25 es 12 + 13 y también es 3 + 4 + 5 + 6 + 7.
Investigué y leí que es el número de factores impares menos uno. Entonces escribí un programa que encuentra la cantidad de factores extraños y mi respuesta sigue siendo incorrecta en ciertos casos. Alguna idea?
El código parece funcionar bien, pero hay un bloqueo debido al tiempo de espera que probablemente se deba a un error de optimización.
Las restricciones para el posible tamaño de entrada son de 1 a 10 ^ (12)
El siguiente código se copia dela respuesta de alfasin abajo:
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
static long consecutive(long num) {
while (num % 2 == 0) num /= 2;
return consecutiveHelper(num);
}
public static long consecutiveHelper(long num) {
return LongStream.rangeClosed(3, (num / 2)).parallel().filter(x -> x % 2 != 0).map(fn -> (num % fn == 0) ? 1 : 0).sum();
}
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
final String fileName = System.getenv("OUTPUT_PATH");
BufferedWriter bw = null;
if (fileName != null) {
bw = new BufferedWriter(new FileWriter(fileName));
}
else {
bw = new BufferedWriter(new OutputStreamWriter(System.out));
}
int res;
long num;
num = Long.parseLong(in.nextLine().trim());
res = consecutive(num);
bw.write(String.valueOf(res));
bw.newLine();
bw.close();
}
}
Esto es lo que tengo actualmente