Проблема не совсем понятна, и действительно может заключаться в том, что для большого N
и малого M
простая печать в консоль достаточно ресурсоемкая, в худшем случае потребуется вывести на печать порядка 2 млрд. чисел (M = 1, N = 231 - 1).
Числа long
применяются в исходном коде, чтобы избежать целочисленного переполнения, хотя если входные данные по условию меньше 231 - 1, т.е. Integer.MAX_VALUE
. Однако, достаточно проверить, что в процессе вычислений все числа больше 0, согласно условий задачи.
Следует попробовать как минимум выводить пробел отдельно от числа, чтобы избежать ненужных конкатенаций:
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
boolean f = false;
for (int i = m; i <= n && i > 0; i += m) {
if (f) {
System.out.print(" ");
}
System.out.print(i);
f = true;
}
if (!f) {
System.out.println("NO");
}
Или же построить строку при помощи StringBuilder
и вывести её целиком:
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
StringBuilder sb = new StringBuilder();
boolean f = false;
for (int i = m; i <= n && i > 0; i += m) {
if (f) {
sb.append(" ");
}
sb.append(i);
f = true;
}
if (!f) {
System.out.println("NO");
} else {
System.out.println(sb.toString());
}
Более навороченный вариант для больших входных данных -- использовать буферизированный вывод BufferedWriter
, так как максимальный размер StringBuilder
не может превышать уже упоминавшейся константы 2 ГиБ Integer.MAX_VALUE
и соответственно с его помощью можно напечатать последовательность длиной порядка 250 млн чисел. Буферизованный же вывод позволит распечатать все 2 млрд целых чисел, однако, не факт что и такой способ уложится в ограничение по времени.
private static void printSeq(int m, int n) throws IOException {
final int bufSize = 65_536;
boolean f = false;
int len = 0;
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out), bufSize);
for (int i = m; i <= n && i > 0; i += m) {
if (f) {
bw.append(" ");
len++;
}
String num = Integer.toString(i);
int ll = num.length();
if (len + ll > bufSize) {
bw.flush();
len = 0;
}
len += ll;
bw.append(num);
f = true;
}
if (!f) {
System.out.println("NO");
} else {
bw.newLine();
bw.flush();
}
}
Тест:
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
printSeq(m, n);
}