Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/163: Рейтинг темы: голосов - 163, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 108
1

Как вывести все делители числа

25.06.2014, 13:24. Показов 30171. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вписываем число, должны быть выведены все его делители. Я написал:
C#
1
2
3
4
5
6
            Console.Write("Введи число ");
            int i = int.Parse(Console.ReadLine());
            for (int a = 1; a <= i; a++)
            {
                if (i % a == 0) Console.Write("{0} ", a);
            }
Я написал, но проблема в том, что это не совсем эффективно. То есть если число i делится на 2, то нет смысла проверять(как в моем методе) i/2, то есть допустим если число 12 делится на 2, то нет смысла проверять число 6, а надо сразу его вывести. Как это сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2014, 13:24
Ответы с готовыми решениями:

Вывести все делители данного числа
Вывести все делители данного числа

Найти все делители числа N и вывести их на экран
найти все делители числа N и вывести на экран их все: с помощью while

Требуется вывести все простые делители введенного числа
Вводится число. Требуется вывести все простые делители введенного числа.

Вывести все делители натурального числа кратные целым числам С и D одновременно
Для заданного натурального числа N: вывести на экран все делители кратные целым числам С и D...

17
31 / 30 / 13
Регистрация: 15.02.2014
Сообщений: 157
25.06.2014, 13:30 2
tatarrr, Мне кажется ваш способ наиболее эффективен. Только если с проверками и хранением данных о числах, которые уже имеются, можно избавиться от вашей проблемы
1
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 108
25.06.2014, 13:33  [ТС] 3
fast1kkk
К сожалению я решил эту задачу сегодня 3 разными способами, преподаватель на этот способ сказал, что не эффективно, а на остальные - ахинея((
0
31 / 30 / 13
Регистрация: 15.02.2014
Сообщений: 157
25.06.2014, 13:36 4
tatarrr, Можете показать ваши способы
0
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
25.06.2014, 13:51 5
C#
1
for (int a = 1; a <= i/2; a++)
Так как после i/2 результат будет лежать в пределах от 1 до 2, то нет смысла искать там целочисленные делители. Вообще, вроде бы нужно искать до sqrt(i), но я обычно делаю до i/2, ибо не силен в математике
1
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.06.2014, 13:55 6
И вот это стоит почитать, пожалуй...
2
Life Builder
533 / 496 / 375
Регистрация: 12.01.2011
Сообщений: 1,755
25.06.2014, 14:16 7
Цитата Сообщение от tatarrr Посмотреть сообщение
если число 12 делится на 2, то нет смысла проверять число 6, а надо сразу его вывести. Как это сделать?
может break; поставить
C#
1
2
3
4
5
6
            Console.Write("Введи число ");
            int i = int.Parse(Console.ReadLine());
            for (int a = 1; a <= i; a++)
            {
                if (i % a == 0) {Console.Write("{0} ", a); break;}
            }
1
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
25.06.2014, 14:40 8
Может ваш преподаватель ожидал увидеть такой код:
C#
1
2
3
4
5
6
            Console.Write("Введи число ");
            int i = int.Parse(Console.ReadLine());
            for (int a = 1; a*a < i; a++)
            {
                if (i % a == 0) { Console.Write("{0} {1} ", a, i / a); }
            }
он выводит все делители числа, только в неотсортированном виде.
1
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 108
25.06.2014, 17:01  [ТС] 9
Sergio Leone
Ваша программа работает не всегда, например с числом 9.
Я написал кстати программу исходя из собственных доводов, вот код, как думаете, оценит?
C#
1
2
3
4
5
6
7
8
9
10
Console.Write("Введи число ");
            int i = int.Parse(Console.ReadLine());
            for (int a = 1; a <= i / a; a++)
            {
                if (i % a == 0)
                {
                    if (a != i / a) Console.Write("{0} {1} ", a, i / a);
                    else Console.Write("{0} ", a);
                }
            }
Этот код пишу, чтобы не было такого казуса, как при числе 9, выводится число 3 два раза
C#
1
2
 if (a != i / a) Console.Write("{0} {1} ", a, i / a);
                    else Console.Write("{0} ", a);
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.06.2014, 17:11 10
tatarrr, просто правая граница включительно должна быть:
C#
1
2
3
4
5
6
7
            Console.Write("Введи число ");
            int n = int.Parse(Console.ReadLine());
            for (int i = 1; i * i <= n; i++)
            {
                if (n % i == 0)
                    Console.WriteLine(i);
            }
и выбирайте для циклом переменные i,j или k. Другие буквы лучше не использовать.
0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
25.06.2014, 19:26 11
Цитата Сообщение от Psilon Посмотреть сообщение
tatarrr, просто правая граница включительно должна быть:
сейчас нет возможности проверить код.
а что Ваш код выведет, например, для числа 17 ? А для числа 100 ?
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.06.2014, 19:32 12
Sergio Leone, это простое число. Этот код возвращает все делители. Если нужно в конце и само число вывести, в конце можно просто так и сделатЬ:
C#
1
2
3
4
5
6
            for (int i = 1; i * i <= n; i++)
            {
                if (n % i == 0)
                    Console.WriteLine(i);
            }
            Console.WriteLine(n);
0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
25.06.2014, 21:20 13
да я вам о другом толкую.
введите, например, число 12. Оно же не простое?
ваш код, если я правильно понимаю, выведет
1
2
3
12

А куда делись делители
4
6
?!

А мой код с выводом ПАРЫ делителей выводил ВСЕ делители числа, как и требуется в задаче!

Нужно только не выводить пару, когда число N является квадратом натурального числа.
проверка на это
if (!(i==n/i)) вот тогда вывести пару делителей i и n/i

Добавлено через 2 минуты
Цитата Сообщение от tatarrr Посмотреть сообщение
Я написал кстати программу исходя из собственных доводов, вот код, как думаете, оценит?
О, точно так. Я именно такое и предлагал.
И если ваш препод не оценит это решение, тогда я не понимаю, что же он от Вас ждёт!

Отпишитесь после сдачи о результатах, плиз.
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.06.2014, 22:32 14
Sergio Leone, тогда берете ваш первый код и это будет самый быстрый вариант. Быстрее не бывает. Что еще хотите?..
1
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
25.06.2014, 22:34 15
Psilon, дык, вся интрига в том, чего преподаватель добивается от автора темы.
Надеюсь, мы это узнаем после попытки сдачи кода.


я верю в то, что результат с i*i<=n препода полностью удовлетворит!
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.06.2014, 22:48 16
Sergio Leone, может был вопрос про простые делители. Потому что до половины доже не вариант смотреть. Например у числа 6 делители 2 4 6, при этом 4 > 6/2.

Добавлено через 2 минуты
Sergio Leone, то есть судя по туманному описанию автора, препод просит его факторизовать число, а потом просто выводить множители, но это будет дольше, чем обычный перебор. Например:
Цитата Сообщение от tatarrr Посмотреть сообщение
То есть если число i делится на 2, то нет смысла проверять(как в моем методе) i/2, то есть допустим если число 12 делится на 2, то нет смысла проверять число 6, а надо сразу его вывести. Как это сделать?
то есть предлагается найти, что 2 делитель, а после этого
C#
1
2
for(int i = 2; i < n; i+=2)
   Console.WriteLine(i);
но это бред же. Ни о каком ускорении тут речь идти не может.

Добавлено через 42 секунды
tatarrr, короче, ваш препод фигню сказал. Перебор ВСЕХ делителей числа способом, который вы написали, самый быстрый. Можете ему показать эту тему
0
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
26.06.2014, 00:00 17
Цитата Сообщение от Psilon Посмотреть сообщение
Потому что до половины доже не вариант смотреть. Например у числа 6 делители 2 4 6, при этом 4 > 6/2.
4? 6/4 = 1.5
1
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.06.2014, 13:04 18
Lexeq, да, туплю
0
26.06.2014, 13:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2014, 13:04
Помогаю со студенческими работами здесь

Удалить из целого числа все делители на 2
Добрый день. Сегодня начали изучать С# и сразу же на паре дали лабораторную работу состоящую из...

Найти все делители натурального числа N
Выдает то же число, что и N. Где ошибка? Double n = Double.Parse(textBox1.Text); ...

Получить все делители числа, взаимно простые с р
Решите задачу: Даны целые числа n и m. Получить все делители числа m, взаимно простые с р.

Получить все делители числа q, взаимно простые с p
Даны целые числа p и q. Получить все делители числа q, взаимно простые с p. помогите решить...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru