хорошо теперь это терпит неудачу в течение 15
отаю над программой, которая принимает целое число и находит количество комбинаций последовательных сумм, которые имеет целое число:
Число 13 может быть выражено как сумма последовательных положительных целых чисел 6 + 7. Четырнадцать могут быть выражены как 2 + 3 + 4 + 5, также сумма последовательных положительных целых чисел. Некоторые числа могут быть выражены как сумма последовательных положительных целых чисел более чем одним способом. Например, 25 - это 12 + 13, а также 3 + 4 + 5 + 6 + 7.
Я исследовал и прочитал, что это число нечетных факторов минус один. Поэтому я написал программу, которая находит число нечетных факторов, и в некоторых случаях мой ответ все еще неверен. Любое понимание?
Кажется, код работает нормально, но происходит сбой из-за тайм-аута, что, вероятно, связано с ошибкой оптимизации.
Ограничения для возможного размера ввода от 1 до 10 ^ (12)
Код ниже скопирован сответ Альфасина ниже:
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();
}
}
Это то, что у меня сейчас есть