На codeforce возникла следующая проблема
Два солдата играют в игру. Вначале первый из них выбирает натуральное число n и передает его второму солдату. Затем второй пытается сделать максимально возможное количество раундов. Каждый раунд состоит из выбора положительного целого числа x > 1, такого, что n делится на x, и замены n на n / x. Когда n становится равным 1 и больше нет возможных допустимых ходов, игра заканчивается, и счет второго солдата равен количеству сделанных им раундов.
Чтобы сделать игру более интересной, сначала солдат выбирает n формы a! / б! для некоторых положительных целых чисел a и b (a ≥ b). Вот к! мы обозначаем факториал k, который определяется как произведение всех натуральных чисел, не больших k.
Каков максимально возможный балл второго солдата?
Ввод Первая строка ввода состоит из одного целого числа t (1 ≤ t ≤ 1 000 000), обозначающего количество игр, в которые играют солдаты.
Далее следуют t строк, каждая содержит пару целых чисел a и b (1 ≤ b ≤ a ≤ 5 000 000), определяющих значение n для игры.
Вывод Для каждой игры выведите максимальное количество очков, которое может получить второй солдат.
Итак, я попытался вычислить количество простых множителей n (как при простой факторизации n).
Ниже приведен мой код, но он не подходит для тестового примера
a=5000000 и b= 4999995
import java.util.Scanner;
import java.lang.*;
public class Main {
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
int count=0;
Scanner input=new Scanner(System.in);
int testcases=input.nextInt();
for(int m=1;m<=testcases;m++){
count=0;
long a=input.nextLong();
long b=input.nextLong();
double n=1;
for(double i=b+1;i<a+1;i++)
n=n*i;
//System.out.println(Math.sqrt(n));
for(int i=2;i<Math.sqrt(n);i++){
if(n%i==0){
while(n%i==0){
n=n/i;
count++;
}
}
}
if(n!=1) count++;
System.out.println(count);
}
}
}