Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.92
PANIC666
0 / 0 / 0
Регистрация: 06.08.2009
Сообщений: 19
#1

Делители - C++

27.02.2010, 12:59. Просмотров 3452. Ответов 10
Метки нет (Все метки)

По заданному натуральному числу N необходимо вычислить количество натуральных чисел, которые являются делителями N! (факториала числа N).

Например, при N=4, N!=4•3•2•1=24. Это число имеет следующие делители: 1, 2, 3, 4, 6, 8, 12, 24. Таким образом, искомое количество составляет 8.

Напишите программу, которая по натуральному N, находит количество делителей его факториала.

Входные данные

Единственная строка содержит одно целое число N (1 ≤ N ≤ 45).

Выходные данные

Единственная строка должна содержать одно целое число – найденное количество делителей числа N!

Пример
ввод 4
вывод 8
Прошу помоч в нахождении делителей при факториале 45 программа очень долго ищет,а нужно уложится в 3 сек.
Буде очень благодарен за помощь

Добавлено через 6 минут
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main ()
{
long double n,i=1,g;
float c;
long double  f=1;
    cin>>n;
    while(i<=n)
        {f*=i;
        i++;}
        cout<<f<<endl;
             for (i = 1; i <= f; i++) {
                 if (f/i==0) {
                      c++;
                 }
             }
             cin>>c;
            cin>>g;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2010, 12:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Делители (C++):

Делители - C++
Делители Условие задачи: Дано число n. Найти все его делители. Решение: Т. е. нам нужно найти такие числа Xi при которых...

Делители числа - C++
надо написать программу что находит количество делителей каждого из целых чисел до 120. #include &lt;iostream&gt; using namespace std; ...

Простые делители - C++
Требуется написать программу которая находит сумму простых делителей числа n

Программа на C++ найти делители - C++
Найти все делители натурального числа n. программа на циклы

Вывести делители числа n - C++
Нужно вывести делители числа n, НО по три елемента в каждой сттроке. Помогите, пожалуйста)

Взаимно простые делители - C++
Даны целые числа p и q. Получить все делители числа q, взаимно простые с p, т.е. не имеющие с p общих делителей. Помогите пожалуйста...

10
Yurii_74
paladin
280 / 180 / 3
Регистрация: 25.02.2009
Сообщений: 592
27.02.2010, 13:48 #2
Ну ведь видно, что задача на разложение n! на степени простых чисел и количество их комбинаций. В лоб она не должна решаться. Олимпиада школьников за какой класс?
И i после некоторой итерации вообще перестанет увеличиваться.
0
PANIC666
0 / 0 / 0
Регистрация: 06.08.2009
Сообщений: 19
27.02.2010, 13:54  [ТС] #3
11 Класс.Вот сам факториал прога ищет без проблем но когда я прописываю искать делители то при 45! оно висит долго но потом дает ответ только правильный ли он
0
Yurii_74
paladin
280 / 180 / 3
Регистрация: 25.02.2009
Сообщений: 592
27.02.2010, 13:59 #4
Вы представляете себе 45! ? В нем около 12 нулей в конце. А значащих цифр - больше чем вам позволят десятки лонгдаблов суммарно. И лонгдаблы тоже вполне себе дискретны.
0
PANIC666
0 / 0 / 0
Регистрация: 06.08.2009
Сообщений: 19
27.02.2010, 14:12  [ТС] #5
Я представляю 45! но я не могу сократить время выполнения программы,тип данных который использую работает находит факториалы даже 500! но вот делители очень долго
0
Yurii_74
paladin
280 / 180 / 3
Регистрация: 25.02.2009
Сообщений: 592
27.02.2010, 15:02 #6
Цитата Сообщение от PANIC666 Посмотреть сообщение
тип данных который использую
long double физически не может хранить столько значащих десятичных знаков. Ваш вариант заведомо выдаст неправильный ответ.
Правильная последовательность:
раскладываем каждый множитель на произведение степеней простых чисел (пусть для простых чисел у нас будет массив a[N], где N - номер простого числа (0 для 2, 1 для 3, 2 для 5, 3 для 7 и т. д.) и добавляем к значению степени соотв. простого числа в массиве.
Перемножаем ненулевые значения в массиве, получаем ответ.
0
Yertugan
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 6
11.12.2010, 10:52 #7
ну допустим
5!
1 2 3 4 5 6 7
a[ 3 1 1 ]

и тогда
3*1*1=3
но это не количество делителей 5!
количество делителей у 5! это 16

Добавлено через 1 минуту
ну допустим
5!
1 2 3 4 5 6 7
3 1 1

и тогда
3*1*1=3
но это не количество делителей 5!
количество делителей у 5! это 16
0
Yertugan
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 6
13.12.2010, 18:14 #8
Цитата Сообщение от Yurii_74 Посмотреть сообщение
long double физически не может хранить столько значащих десятичных знаков. Ваш вариант заведомо выдаст неправильный ответ.
Правильная последовательность:
раскладываем каждый множитель на произведение степеней простых чисел (пусть для простых чисел у нас будет массив a[N], где N - номер простого числа (0 для 2, 1 для 3, 2 для 5, 3 для 7 и т. д.) и добавляем к значению степени соотв. простого числа в массиве.
Перемножаем ненулевые значения в массиве, получаем ответ.
А вы не могли бы показать это на примере по подробнее, а то не могу въехать.
Ну скажем на пример 5!
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.12.2010, 18:26 #9
Цитата Сообщение от Yertugan Посмотреть сообщение
ну допустим
5!
1 2 3 4 5 6 7
a[ 3 1 1 ]
Тогда так:
5!
2 3 4 5 <- множители числа 5!
Раскладываем каждый множитель на простые числа:
2 - раскладываем на 2
2 - раскладываем на 3
4 - раскладываем на 2*2
5 - раскладываем на 5
Итого простых множителей в числе 5!:
2 3 5 <- простые множители
3 1 1 <- кол-во простых множителей
Теперь чуть-чуть комбинаторки:
3+(3*1+1)+((3+(3*1+1))*1+1)+1=
Считайте и сверяйте ответ.
1
Yertugan
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 6
13.12.2010, 18:36 #10
Теперь чуть-чуть комбинаторки:
3+(3*1+1)+((3+(3*1+1))*1+1)+1=
Считайте и сверяйте ответ.[/QUOTE]

Все понял до этого момента.
Ответ то правильный, а какая формула?
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.12.2010, 18:44 #11
Все вот отсюда
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Итого простых множителей в числе 5!:
2 3 5 <- простые множители
3 1 1 <- кол-во простых множителей
Алгоритм такой:
сначало сумма равна 0. Идем по числам из нижней строки.
1. К имеющейся сумме прибавляем эту же сумму, умноженную на очередное число из второй строки. Плюс это же число.
2. Переходим к следующему числу из второй строки и переходим к п.1
Когда все закончится прибавить еще одну 1 (делитель 1).
1
13.12.2010, 18:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2010, 18:44
Привет! Вот еще темы с ответами:

Делители натурального числа - C++
Привет всем) завтра экзамен ... не могли бы помочь мне сделать задание? или хотя бы натолкнуть на мысль. буду благодарен Дано...

общие делители n чисел - C++
вводится n чисел,требуется узнать их общие делители.

Делители в обратной последовательности - C++
Написать программу, которая выводит все делители числа в обратной последовательности. Написал код для обычного вывода: #include...

Задача Делители (divisors) - C++
Делители (divisors) Определите, какое из первых n натуральных чисел имеет наибольшее количество делителей. Входные данные ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru