Número de erro de somas consecutivas?
Estou trabalhando em um programa que leva um número inteiro e encontra o número de combinações de somas consecutivas que o número inteiro tem:
O número 13 pode ser expresso como uma soma dos números inteiros positivos consecutivos 6 + 7. Quatorze podem ser expressos como 2 + 3 + 4 + 5, também uma soma dos números inteiros positivos consecutivos. Alguns números podem ser expressos como uma soma de números inteiros positivos consecutivos de mais de uma maneira. Por exemplo, 25 é 12 + 13 e também é 3 + 4 + 5 + 6 + 7.
Pesquisei e li que é o número de fatores ímpares menos um. Então, eu escrevi um programa que encontra o número de fatores ímpares e minha resposta ainda está errada em certos casos. Alguma visão?
O código parece funcionar bem, mas há uma falha devido ao tempo limite, provavelmente devido a um erro de otimização.
As restrições para um possível tamanho de entrada são de 1 a 10 ^ (12)
O código abaixo é copiado deresposta de alfasin abaixo:
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();
}
}
Isto é o que eu tenho atualmente