Você pode otimizar muito o seu programa de duas formas:
1. Tire o resto entre o mínimo e o número que vc deseja tirar o múltiplo. Esse valor representa o quão "à frente" do próximo múltiplo o mínimo está. Então, basta subtrair esse número do mínimo e somar à num para achar o primeiro múltiplo da série;
2. A partir daí, basta somar o próprio num para achar o próximo múltiplo.
Isso permite dividir o tempo de cálculo proporcionalmente ao número que vc irá calcular o numero (o tempo será (min-max divididos por num).
Observe:
public List<Integer> multiplo(int num, int min, int max)
{
//Busca do primeiro multiplo de num
List<Integer> retorno = new ArrayList<Integer>();
int valor = min - (min % num) + num;
//Adicionamos o primeiro multiplo na lista
if (valor <= max)
retorno.add(valor);
//Agora, basta somar num para achar o próximo multiplo
valor += num;
while (valor <= max) {
retorno.add(valor);
valor += num;
}
return retorno;
}
Uso:
System.out.println("Multiplos de 3: " + multiplo(3, 10, 10000));
System.out.println("Multiplos de 5:" + multiplo(5, 10, 10000));
Nesse método, o próprio min não está incluído no intervalo. Vc pode mudar o trecho inicial, caso queira incluí-lo. Basta usar o próprio valor quando o resto for 0.