Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
 Аватар для Slavik1985
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58

Найти самый малый делитель для числа

10.01.2016, 12:20. Показов 6874. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void divisors(int num) {// с диапазоном [2; sqrt(n)]. 
        if (num == 0) {
            System.out.println("enter number >0");
            return;
        }
        for (int i = 2; i < sqrt(num); i++) {
            if ((num % i) == 0) {
                if ((i % 2) == 0) {
                    System.out.print(i + " -even divisor, ");return;
                } else {
                    System.out.println(i + " -odd divisor");return;
                }
            }else if((num % i) != 0){i++;
                if((num % i) == 0){System.out.println(i+"-odd divisor");}
                else{i++;System.out.println("simple");}
            }
            return;
        }
    }
компилятор ругается dead code...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2016, 12:20
Ответы с готовыми решениями:

Самый большой простой делитель числа
#include &lt;iostream&gt; using namespace std; void main() { setlocale(LC_ALL, &quot;Russian&quot;); cout &lt;&lt; &quot;Найдите самый большой...

Самый большой делитель сложного числа, являющийся простым числом
Простые делители числа 13195 - это 5, 7, 13 и 29. Какой самый большой делитель числа 600851475143, являющийся простым...

Найдите самый маленький натуральный делитель числа x, отличный от 1 (2 <= x <= 30000)
Найдите самый маленький натуральный делитель числа x, отличный от 1 (2 &lt;= x &lt;= 30000). Данные вводятся с клавиатуры, выводятся на экран....

20
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
10.01.2016, 14:44
Цитата Сообщение от Slavik1985 Посмотреть сообщение
компилятор ругается dead code...
в какой строке?
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
10.01.2016, 15:32
Slavik1985, вроде бы ни каких особых огрех не видно, если Math импортирован, то и извлечение квадрата будет работать... А вот чего конкретно делает этот код - вот тут у меня непонятки... По названию темы: "найти самый малый делитель для числа" - тут и программа не нужна, ответ "1" - меньше не бывает (если целые числа рассматривать), а тут скорее выстроена некая (хоть и не совсем понятная) проверка числа на простоту. Ну вроде как простое оно или нет. Хотя я могу и ошибиться - нужно попробовать хотя бы где-нибудь запустить...

Добавлено через 1 минуту
Slavik1985, Вы бы лучше писали задание полностью: найти НОД или НОК - было бы всем проще, и Вам в том числе.
0
 Аватар для Slavik1985
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58
10.01.2016, 16:42  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
в какой строке?
строка 6 на i++

Добавлено через 3 минуты
Цитата Сообщение от HOBATOP Посмотреть сообщение
Slavik1985, вроде бы ни каких особых огрех не видно, если Math импортирован, то и извлечение квадрата будет работать... А вот чего конкретно делает этот код - вот тут у меня непонятки... По названию темы: "найти самый малый делитель для числа" - тут и программа не нужна, ответ "1" - меньше не бывает (если целые числа рассматривать), а тут скорее выстроена некая (хоть и не совсем понятная) проверка числа на простоту. Ну вроде как простое оно или нет. Хотя я могу и ошибиться - нужно попробовать хотя бы где-нибудь запустить...

Добавлено через 1 минуту
Slavik1985, Вы бы лучше писали задание полностью: найти НОД или НОК - было бы всем проще, и Вам в том числе.
найти наименьшее натуральное число на которое делится число n в диапазоне [2; sqrt(n)]

Добавлено через 7 минут
а и по видимому само число n должно быть >=2 там во второй строке надо было вместо if (num == 0)дать if (num >= 2)
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
10.01.2016, 19:57
Slavik1985, не знаю, в среде NetBeans код запускается и работает, но как-то своеобразно: число 49 обозвал простым! А if(num == 0) в начале написано правильно - при попытке ввести ноль программа просит ввести что-нибудь другое, а с нулём она работать не желает видите ли. Кстати при вводе 1 вообще ни каких сообщений не выводит, просто отработала успешно и усё!
0
 Аватар для Slavik1985
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58
11.01.2016, 09:54  [ТС]
Цитата Сообщение от HOBATOP Посмотреть сообщение
Slavik1985, не знаю, в среде NetBeans код запускается и работает, но как-то своеобразно: число 49 обозвал простым! А if(num == 0) в начале написано правильно - при попытке ввести ноль программа просит ввести что-нибудь другое, а с нулём она работать не желает видите ли. Кстати при вводе 1 вообще ни каких сообщений не выводит, просто отработала успешно и усё!
потому что дальше чем делитель 3 програма не работает не хочет циклить должно додавать +1 если делитель не подходит не знаю где ошыбка

Добавлено через 30 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void divisors(int num) {
        if (num<2) {
            System.out.println("enter number >=2");
            return;
        }
        for (int i = 2; i <= sqrt(num); i++) {
            switch (i){
            case 2:if(num%i==0){System.out.println("min div for "+num+"="+i);return;}
            else{i++;}
            default:if(num%i==0){System.out.println("min div for "+num+"="+i);return;}
            else if(num%i!=0){i++;if(num%i==0){System.out.println("min div for "+num+"="+i);}}
            else if(i>sqrt(num)){System.out.println("simple");}
            }
        }
    }
еще такой вариант работает получше но на большых простых числах типа 67 не знает что ей делать

Добавлено через 12 часов 29 минут
интересное дело запустил только что под эклипсЛуна программа работает подругому тепер на 49 виснет при return
a если break тo OK но на напр 36 дает два значения 3и 2 до этого запускал на Марсе
0
10 / 11 / 6
Регистрация: 11.05.2015
Сообщений: 101
11.01.2016, 14:21
Цитата Сообщение от HOBATOP Посмотреть сообщение
Кстати при вводе 1 вообще ни каких сообщений не выводит, просто отработала успешно и усё!
а что вы хотели увидеть? условие выполняется лишь когда і<sgrt(num), корень из 1 = 1, а у вас начальное і = 2, соответственно цикл даже не запускается.

Добавлено через 1 час 16 минут
Цитата Сообщение от Slavik1985 Посмотреть сообщение
найти наименьшее натуральное число на которое делится число n в диапазоне [2; sqrt(n)]
если бы я был индейцем, то сделал бы так
Java
1
2
3
4
5
6
7
8
9
10
11
int number = 35;
        if(number<4) System.out.println(number+" не входит в диапазон делителя");
        if(number==4) System.out.println("Наименьший делитель числа 4 = " +4/2 );
        for(int i = 2; i<Math.sqrt(number); i++){
            if(number % i == 0){
            System.out.println("Наименьший делитель числа " + number + " = " + i);
            break;
            }else if(i==(int) Math.sqrt(number)){
            System.out.println("Число делится лишь на 1, и само на себя!");
            }
        }
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
11.01.2016, 15:05
Цитата Сообщение от RentrAnt Посмотреть сообщение
а что вы хотели увидеть?
да я как раз ни чего и не хотел увидеть, а помогал автору заметить недочёты в его коде. Бесплатное тестирование, так сказать.
0
10 / 11 / 6
Регистрация: 11.05.2015
Сообщений: 101
11.01.2016, 16:07
HOBATOP, вообще, исходя из условия задачи, делитель это натуральное число в диапазоне от 2 до sqrt(n), значит мы даже не ожидаем на ввод число n значение которого будет в диапазоне от минус бесконечности до трех, ожидаемые числа от 4 и больше, потому что, например, у 4 sqrt = 2, но мы не можем запустить цикл с четверкой, потому что она равна условию, у 5 sqrt тоже =2, но 2 с хвостом, поскольку sqrt возвращает вещественное число, цикл сработает, что бы решить проблему с четверкой и убрать лишнее условие, в котором мы тупо забиваем "ответ на вопрос", можно добавить к корню хвост, к примеру так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args){
        int number = 4;
        if(number<4) System.out.println(number+" не входит в диапазон делителя");
        for(int i = 2; i<Math.sqrt(number)+0.01; i++){
            if(number % i == 0){
            System.out.println("Наименьший делитель числа " + number + " = " + i);
            break;
            }else if(i==(int) Math.sqrt(number)){
            System.out.println("Число делится лишь на 1, и само на себя!");
            }
        }
    }
0
11.01.2016, 16:32

Не по теме:

RentrAnt, я чего-то в толк не возьму: я же не Topic Starter, чего Вы мне хотите объяснить? Программа для обработки чисел обязана хоть как-то реагировать на то, что ей подсунули. Верно? Она на единицу не реагировала, что я и сообщил автору. Всё, что ещё? Вы сделали решение - прекрасно, респект и уважуха. Пусть автор темы оценивает нравится оно ему или нет, с ним обсудите все нюансы с

Цитата Сообщение от RentrAnt Посмотреть сообщение
решить проблему с четверкой и убрать лишнее условие, в котором мы тупо забиваем "ответ на вопрос"
. Я-то тут каким боком? Мне лично любое решение понравится, лишь бы оно устраивало автора топика. Вот когда я для себя детально рассматривал цикл while, то решал задачу разложения числа на простые множители. Получилось более-менее, домой приеду - сейчас некогда по памяти восстанавливать - выложу код, вот его и критикуйте, предлагайте альтернативы или модификации. Ok?

0
10 / 11 / 6
Регистрация: 11.05.2015
Сообщений: 101
11.01.2016, 17:21
HOBATOP, к чему эти слезы? это и был ответ для ТС.
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
11.01.2016, 20:54

Не по теме:

RentrAnt, чевой? Какие слёзы? :wall: "Это феерично!"(с) Сегодня что ли магнитные бури? :D



Добавлено через 13 минут

Не по теме:

Ну, блин, насмешил!..



Добавлено через 2 часа 54 минуты
RentrAnt, как вы говорите?
Цитата Сообщение от RentrAnt Посмотреть сообщение
если бы я был индейцем
В таком случае позвольте представиться: подполковник авиации, мастер спорта международного класса Аарон Моисеевич Чингачгук!
Как и обещал: нахождение простых делителей числа. Кстати, Slavik1985, программа выдаёт все делители заданного числа и уже из них можно выбрать хоть самое меньшее, хоть самое среднее, хоть большее.
Конструктивная критика и предложения принимаются с благодарностью, как, впрочем, и всегда.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Prime {
 
    public static void elementary(int q) {
        int w = 2;
        System.out.printf("Простые делители числа %d :", q);
        while (q > 1 && w * w <= q) {
            while (q % w == 0) {
                System.out.printf(" %d,", w);
                q /= w;
            }
            ++w;
        }
        if (q > 1) {
            System.out.printf(" %d", q);
        }
        System.out.println();
    }
    public static void main(String[] args) {
        elementary(2049);
    }
}

Спасибо всем.

Добавлено через 8 минут
P.S.: в качестве теста можно задать число 2310, но и 2049 (https://www.cyberforum.ru/cgi-bin/latex.cgi?1 + {2}^{11}) тоже ничего.
0
 Аватар для Slavik1985
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58
12.01.2016, 15:07  [ТС]
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void divisors(int num) {
        boolean isSimple;
        
        if (num<2) {isSimple=false;
            System.out.println("enter number >=2");
            return;
        }else isSimple=true;
           
        for (int i = 2; i <= sqrt(num); i++) {
            switch (i){
            case 2:
            case 3:
            case 4:if(num%i==0){isSimple=false;System.out.println("min div for "+num+"="+i);return;}
            else i++;
            default:if(num%i==0){isSimple=false;System.out.println("min div for "+num+"="+i);return;}
            else if(i>sqrt(num)){System.out.println("simple");}break;
            }
        }if(isSimple) System.out.println( "Пpocтoe число"); else System.out.println("He простое число"); 
    }
кстати моя новая версия программы... чесно говоря для исполнения её я подкручиваю на вход к ней метод сканера Имхо так удобней и быстрей вводить числа

Добавлено через 6 минут
так что наверное я не такой уж и индеец)
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
12.01.2016, 15:26
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Введите число > 2: ");
        int number = sc.nextInt();
        if (number > 2) {
            if (isPrime(number)) System.out.println("простое");
            else System.out.println("не простое");
        } else System.out.println("Число должно быть > 2");
    }
 
    private static boolean isPrime(int n) {
        if (n % 2 == 0 || n % 10 == 0 || (n > 5 && n % 5 == 0)) return false;
        for (int i = 3; i < Math.sqrt(i); i += 2) {
            if (n % i == 0) return false;
        }
        return true;
    }
ну и для больших чисел можно будет добавить еще проверки на признаки делимости на 7, 9 и т.д. что бы отсеивать бОльшую часть
1
 Аватар для Slavik1985
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58
12.01.2016, 23:29  [ТС]
Цитата Сообщение от Паблито Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Введите число > 2: ");
        int number = sc.nextInt();
        if (number > 2) {
            if (isPrime(number)) System.out.println("простое");
            else System.out.println("не простое");
        } else System.out.println("Число должно быть > 2");
    }
 
    private static boolean isPrime(int n) {
        if (n % 2 == 0 || n % 10 == 0 || (n > 5 && n % 5 == 0)) return false;
        for (int i = 3; i < Math.sqrt(i); i += 2) {
            if (n % i == 0) return false;
        }
        return true;
    }
ну и для больших чисел можно будет добавить еще проверки на признаки делимости на 7, 9 и т.д. что бы отсеивать бОльшую часть
здесь бы не помешала еще проверка hasNextInt а так вроде good
0
13.01.2016, 12:06

Не по теме:

о спасибо за оценку, я польщен
там много чего бы не помешало

0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
13.01.2016, 21:53
Slavik1985, Паблито, ребят, а вы тестировали этот код? Почему-то число 343 (семь в кубе) программа сочла простым, та же ситуация с числами 2431(11*13*17) и 1681(41 в квадрате) - довольно странно это...
Slavik1985, я же уже выкладывал код нахождения всех простых делителей числа. Совсем чуть-чуть допилить надо было бы, ну хотя бы вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public static void elementary(int q) {
        int w = 2, count = 0;
        System.out.printf("Наименьший делитель числа %d :", q);
        while (q > 1 && w * w <= q) {
            while (q % w == 0) {
                if(count == 0){
                System.out.printf(" %d", w);
                }
                q /= w;
                count++;
            }
            ++w;
        }
        if (q > 1 && count == 0) {
            System.out.printf(" %d", q);
        }
        System.out.println();
    }
 
    public static void main(String[] args) {
        elementary(2431);
    }
и программка выдаёт наименьший простой делитель. Ну ведь не сложно же, чуток померекать - и дело в шляпе...
1
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
14.01.2016, 10:41
да, это я здорово лопухнулся
как туда затесалась ошибка я даже не могу объяснить
Java
1
for (int i = 3; i < Math.sqrt(n); i += 2) {
надо брать корень не из i, а из n

спасибо за наблюдательность
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
14.01.2016, 18:22
Цитата Сообщение от Паблито Посмотреть сообщение
i < Math.sqrt(n)
( i * i ) <= n;
Так лучше. Во-первых извлечение корня более трудоёмкая задача, чем умножение, а во-вторых при n равном 25 цикл на второй итерации прервётся...
2
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
14.01.2016, 18:42
круто
я про корень понимал что он более трудоемкий, но честно говоря так условие не догадался бы написать
у меня в одной поделке тоже похожая конктрукция есть, пойду переделывать )
спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.01.2016, 18:42
Помогаю со студенческими работами здесь

Найти самый большой правильный делитель
дано натуральное число n.для каждого из n целых чисел вводимых с клавиатуры найти самый большой правильный делитель. правильным называют...

Каков самый большой делитель числа 600851475143, являющийся простым числом
Простые делители числа 13195 - это 5, 7, 13 и 29. Каков самый большой делитель числа 600851475143, являющийся простым числом? кто...

Что здесь не так? Найдите самый маленький натуральный делитель числа x, отличный от 1 (2 <= x <= 30000)
program mindiv; var i, x: integer; begin repeat write('x = '); readln(x); if (x &lt; 2) or (x &gt; 30000) then...

Найти делитель для числа
Здравствуйте! Bat файл создаёт число a (от 2 до 9), затем создаёт число n (от 1 до 2) и уже потом создаёт число b (делитель) вот так: ...

Найти в данной последовательности число, которое имеет самый большой наибольший общий делитель с числом А
Дана последовательность из N натуральных чисел и натуральное число А. Найти в данной последовательности число, которое имеет самый большой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru