Как я могу решить эту проблему в java/ C / C++? Мое решение показывает TLE (time limit extended)! algo должен быть полностью переработан каким-то другим способом, я думаю!
Вам дан интервал целых чисел [A, B]. для каждого числа в этом интервале вычислите его наибольший нечетный делитель. Выведите сумму этих делителей.
Ввод
Первая строка содержит целое число T, представляющее количество последующих тестовых случаев
Каждый тестовый случай состоит из одной строки, содержащей два целых значения A и B.
Выход
Выходные данные должны содержать ответ для каждого тестового случая в отдельной строке.
Каждый ответ состоит из одного целого значения.
Пример Ввода
3
1 3
1 4
3 9
Пример Вывода
5
6
29
Объяснение
1+1+3=5
1 + 1 + 3 + 1 = 6
3 + 1 + 5 + 3 + 7 + 1 + 9 = 29
Что я уже пробовал:
import java.util.Scanner; class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scn = new Scanner(System.in); int t = scn.nextInt(); while (t-- > 0) { int l = scn.nextInt(); int r = scn.nextInt(); long sum = 0; for (int i = l; i <= r; i++) { sum += oddDivisor(i); } System.out.println(sum); } } public static long oddDivisor(int num) { long sum = 1; for (int i = 1; i * i <= num; i++) { if (i * i == num && i%2==1) { sum=i; } else { if (num % i == 0) { if (i % 2 == 1) { sum = i; } if ((num / i) % 2 == 1) { sum = num / i; } } } } return (((num%2)==0)?sum:num); } }