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

факториал - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Инкремент невалидного итератора http://www.cyberforum.ru/cpp-beginners/thread381647.html
Привет. Этот вопрос задали знакомому на собеседовании... Что произойдет при инкременте невалидного итератора?
C++ Dll com-совместимая Подскажите пожалуйста, как в реализации обычная dll отличается от com-совместимой dll? http://www.cyberforum.ru/cpp-beginners/thread381588.html
C++ Timer начало змейки
Есть таймер и есть label1 таймер включен в таймере прописано Label1->Left= Left +1; и в результате Label1 перемещаетья примерно на 5 сантиметров влево и все, больше не двигается в чем дело, ведь он должен каждую секунду перемещать на чуть чуть то есть на одну единицу, а он прыгает и замирает.
C++ DbLookUpComboBox
Есть Datasource2 ADOQuery2 , DbLookUpComboBox и база данных в которой 2 параметра это Surname и код (ключевое поле) в свойствах выбрано : в DataSource2 : DataSet-> ADOQuery2 в ADOQuery2 : connection = база данных
C++ Возведение в степень http://www.cyberforum.ru/cpp-beginners/thread381574.html
Дано число n и его нужно возвести в степень s. Можно ли это как-то сделать не используя циклы. Заранее спасибо...
C++ перегрузка операторов Имеется такая программа: class reversion { vector<int> mass1; vector<int> mass2; vector<int> rev1; vector<int> rev2; vector<int> mult1; vector<int> mult2; подробнее

Показать сообщение отдельно
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.11.2011, 10:07     факториал
Вы длинной арифметикой это что ли делаете? Не вариант, тут комбинаторика.
Есть код, находит количество нулей в конце факториала N в системе счисления с основанием K.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <cmath>
#include <climits>
 
#ifndef __int64
   typedef long long __int64;
#endif
 
__int64 n, k, i, j, simples[10000], d[10000];
 
int main()
{
    
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    
    std::cin >> n >> k;
    
    j = k;
    
    for ( i = 2; i <= j  ; )
    {
        if ( k % i == 0 )
        {
            ++simples[i];
            k /= i;
        }
        else
        {
            ++i;
        }
    }
    if (k > 1)
        ++simples[k];
    
    __int64 answer = LONG_MAX;
    
    for (__int64 i = 0 ; i <= j ; ++i)
    {
        if ( simples[i] )
        {
            __int64 tmp = i, res = 0;
            while ( n / tmp )
            {
                res += n / tmp;
                tmp *= i;
            }
            
            answer = std::min( answer, res / simples[i] );
        }
    }
    
    std::cout << answer;        
}
 
Текущее время: 08:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru