Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Java. Дано натуральное число n. Среди натуральных чисел от 1 до n найти число с наибольшим количеством делителей.

Звёздная ночь Ученик (99), закрыт 1 год назад
!!!JAVA!!! Вроде бы понятен код, но как выделить число с наибольшим количеством делителей?
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
System.out.println("Введите число n");
int number;
Scanner scanner = new Scanner( System.in );
number = scanner.nextInt();

int count = 2;

while (count < number ){
if (number % count ==0){
System.out.println(count);
}
count++;
}
}
}
Лучший ответ
Новый Человек Просветленный (34434) 1 год назад
Я бы сделал как-то так:
 import java.util.*; 

class Main {

public static void main (String[] args) {
System.out.print ("Введите натуральное число: ");
Scanner scan = new Scanner (System.in);
int n = scan.nextInt ();

int cdiv = 0;
int cnum = 0;
int dmax = 0;
int num = 0;
boolean feq = false;

for (int i = n; i > 1; i--) {
cdiv = 0;
for (int j = 1; j <= i; j++) {
if (i % j == 0) {
cdiv++;
cnum = i;
}
}
if (cdiv > dmax) {
dmax = cdiv;
num = cnum;
} else if (cdiv == dmax)
feq = true;
}

if (dmax > 0 && !feq)
System.out.println (String.format ("Число: %d | делителей: %d", num, dmax));
else
System.out.println (String.format ("У всех или у некоторых чисел в данном диаппазоне одинаковое число делителей"));
}

}
Звёздная ночьУченик (99) 1 год назад
можно узнать, почему используются именно cdiv, cnim, dmax и т.д.? еще не очень в этом разбираюсь :( есть ли какой-то смысл в буквах c и d?
Новый Человек Просветленный (34434) Наталья Семакина, Ну, смысл есть, который "на скорую руку" вкладывал. cdiv - считает количество целочисленных делителей для текущего числа. (c - count, d - division) cnum - просто сохраняет текущее число, так как i находится в пространстве. Может это и не нужно, но на всякий случай. Так как cdiv увеличивает счётчик для текущего числа, нам заранее не известно является ли то значение, которое он накопит, максимальным и поэтому сохраняем его по условию (if) в dmax и само число, которому принадлежит наибольшее значение cdiv на текущей итерации. feq - сигнализирует, было ли обнаружено число с таким же количеством делителей. Программу можно упростить, но тут уже не помещается текст больше 800 символов.
Новый ЧеловекПросветленный (34434) 1 год назад
Более лаконичный вариант: https://onlinegdb.com/cgNf_aNywv
Остальные ответы
Похожие вопросы