0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 8
1

Факториал большого числа

23.10.2013, 18:22. Показов 3938. Ответов 6
Метки нет (Все метки)

Доброго времени суток!
Захотелось вычислить факториал большого числа. Наткнулся на gmp. Посмотрел это https://www.cyberforum.ru/blog... og488.html и доку. Получилось так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <gmp.h>
#include <gmpxx.h>
 
int main()
{
  std::cout << "Введите n:\n";
  unsigned long int n;
  std::cin >> n;
  mpz_t result;
  mpz_init(result);
  unsigned long int one = 1;
  mpz_set_ui(result, one);
  for(unsigned long i = n; i >= 0; i--)
    mpz_mul_ui(result, result, i); 
  gmp_printf("n! = %Zd\n", result);
  mpz_clear(result);
}
Компилирую так: g++ -std=c++11 -o fact fact.cpp -lgmpxx -lgmp. Все собирается, но после ввода числа зависает. Подскажите, пожалуйста, в чем трабл!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2013, 18:22
Ответы с готовыми решениями:

Как вычислить факториал большого числа?
Как возвести 1000 в квадрат. Проблема заключается в том, что ни одна строка не вместит в себя число...

Как посчитать факториал большого числа, если диапазон типа данных (int) ограничен?
а как мне правильно вывести кол-во чисел?? Я так понимаю,что я вышел за пределы диапазона(( ...

Описать рекурсивные функции вещественного типа, вычисляющие факториал и двойной факториал заданного числа
Описать рекурсивные функции Fact(N) и Fact2(N) вещественного типа, вычисляющие значения факториала...

Неправильно вычисляется факториал большого числа
Добрый день, подскажите пожалуйста, у меня есть ответ к задаче из учебника &quot;Компьютерные сети и...

6
46 / 46 / 18
Регистрация: 25.10.2011
Сообщений: 183
23.10.2013, 18:38 2
Не разбираюсь в библиотеке gmp. Однако без неё - более чем реально.
1. Длинная арифметика. Нужна операция ввода, вывода, умножения -> факториал.
2. Факториал можно вычислить почти до 30ти примитивными типами. Хранить в типе unsigned long long и убирать нули в числе, считая их и запоминая.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 8
23.10.2013, 18:59  [ТС] 3
Цитата Сообщение от Hunter13ua Посмотреть сообщение
Не разбираюсь в библиотеке gmp. Однако без неё - более чем реально.
1. Длинная арифметика. Нужна операция ввода, вывода, умножения -> факториал.
2. Факториал можно вычислить почти до 30ти примитивными типами. Хранить в типе unsigned long long и убирать нули в числе, считая их и запоминая.
Думал об этом, но хочется разобраться с gmp.
0
Эксперт С++
8381 / 6142 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.10.2013, 19:04 4
Ошибка банальная, в цикле - i без знаковое, значит неотрицательное...
C++
1
2
for(unsigned long i=n; i!=0; i--)
        mpz_mul_ui(result, result, i);
0
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
23.10.2013, 19:08 5
c__,
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <gmp.h>
int main()
{
  std::cout << "Введите n:\n";
  unsigned long int n;  std::cin >> n;
  mpz_t result; mpz_init(result);
 
  mpz_fac_ui(result, n);
  gmp_printf("n! = %Zu\n", result);
  mpz_clear(result);
}
для факториала есть спец.функции. Раздел 5.9 - Number Theoretic Functions.
Миниатюры
Факториал большого числа   Факториал большого числа  
0
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
23.10.2013, 19:13 6
И да, если используете чисто Сишные функции, то включать <gmpxx.h> и линковать -lgmpxx нет смысла.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 8
23.10.2013, 19:17  [ТС] 7
Цитата Сообщение от Avazart Посмотреть сообщение
Ошибка банальная, в цикле - i без знаковое, значит неотрицательное...
Код C++
1
2
for(unsigned long i=n; i != 0; i--)
* * * * mpz_mul_ui(result, result, i);
Спасибо, не знал. Рабочий вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <gmp.h>
#include <gmpxx.h>
 
int main()
{
  std::cout << "Введите n:\n";
  unsigned long int n;
  std::cin >> n;
  mpz_t result;
  mpz_init(result);
  unsigned long int one = 1;
  mpz_set_ui(result, one);
  for(unsigned long int i = 1; i <= n; i++)
    mpz_mul_ui(result, result, i);
  gmp_printf("n! = %Zd\n", result);
  mpz_clear(result);
}
Добавлено через 2 минуты
Цитата Сообщение от gromo Посмотреть сообщение
c__,
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <gmp.h>
int main()
{
  std::cout << "Введите n:\n";
  unsigned long int n;  std::cin >> n;
  mpz_t result; mpz_init(result);
 
  mpz_fac_ui(result, n);
  gmp_printf("n! = %Zu\n", result);
  mpz_clear(result);
}
для факториала есть спец.функции. Раздел 5.9 - Number Theoretic Functions.
Спасибо. Для числа Эйлера пригодиться.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2013, 19:17
Помогаю со студенческими работами здесь

Факториал некторого числа записан в eax, а нужно вывести этот факториал в ebx
Хочу сделать код факториал некторого числа записан в eax, а нужно вывести этот факториал в ebx и...

Определить во сколько раз факториал числа n! больше факториала числа m!
Определить во сколько раз факториал числа n! больше факториала числа m!

Определить во сколько раз факториал числа n больше числа m
Определить во сколько раз факториал числа n больше числа m

Найти все такие N(N<100),что у числа N!(факториал) сумма цифр-квадрат целого числа
Без этой задачи мне не ставят зачет и я не могу выйти на сэссию=( &quot;&quot;Найти все такие N(N&lt;100),что...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru