Я хочу найти число, которое делится на все числа от 1 до 10. Мой образец кода печатает все числа, которые делятся. Однако как бы я решил приблизиться к проблеме, чтобы получить только число, которое делится на ВСЕ числа от 1 до 10, а не только несколько:
public class prob_5 {
public static void main(String args[]) {
int count = 0;
for (int x = 1; x <= 3000; x++) {
for (int i = 1; i <= 10; i++) {
if (x % i == 0) {
System.out.println(x);
}
}
}
}
}
Во-первых, обратите внимание, что вы не можете печатать внутри внутреннего цикла: это слишком рано. Затем выясните, когда вы можете распечатать: во внешнем цикле, сразу после внутреннего цикла.
Как вы знаете, что вы должны печатать ответ? Вам нужно проверить, что все MOD внутреннего контура не дали никакого остатка. Для этого добавьте флаг boolean, установите его значение true вне внутреннего цикла и установите значение false
если вы увидите ненулевой остаток.
Если ваш флаг переживает внутренний цикл, не становясь false
, вы получите свой ответ!
boolean isGood = true;
for (int i = 1; i <= 10; i++) {
if (x % i != 0) {
isGood = false;
break;
}
}
if (isGood) {
System.out.println(x);
}
Примечание: конечно, нет смысла делать все эти проверки - все, что вам нужно, это найти первое число, приняв решение о наименьшем числе первичных факторов, которые вам нужно умножить, чтобы получить число, которое делится на все десять чисел, а затем распечатать все кратные номера.
Наименьшее общее кратное значений от 1 до 10 - это то, что вы ищете. Чтобы сделать это, все, что вам нужно сделать, это умножить каждое число на следующее, так что у вас будет 1 * 2 * 3 * 4... * 9 * 10. Это всегда даст вам значение, которое делится на все числа в диапазоне.
EDIT: Это именно то, что предложил Оли Чарльворт в своем комментарии - 10 факториалов (10!) - 10 * 9 * 8... * 3 * 2 * 1, что совпадает с тем, что я упоминал ранее.
package com.test.inter;
/**
* Class to find the lowest number divisible by 1,2,3...20 * @author Faiz Ahamad
*/
public class TestLowestDivisibleFaiz {
public static void main(String[] args) {
int n;
boolean isDivisible = true;
for (n = 20; n < 300000000; n++) {
for (int i = 1; i <= 20; i++) {
if (n % i != 0) {
isDivisible = false;
break;
} else {
isDivisible = true;
}
}
// If the number is divisible by all break out of the outer loop to
// get the exact number
if (isDivisible)
break;
}
// Print if the number is divisible by all
if (isDivisible) {
System.out.println(n);
}
}
}