Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
3 / 3 / 2
Регистрация: 18.05.2014
Сообщений: 203

Нужен совет: найти быстрый способ вычисления по формуле (1 сек)

02.11.2014, 21:24. Показов 2415. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите найти быстрый способ вычисления формулы C из n по k(n!/((n-k)!*k!)). Пробовал разложение на простые множители, не получилось, по времени часть тестов не проходит. Вот сам код программы:
Pascal
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
55
56
57
58
59
60
type vector=array [1..1000] of byte;
type TBytes=Set of byte;
procedure SimpleNum(var a:vector;num:integer;c:TBytes);
var i,j,k,l,m,n:integer;
begin
j:=2;
while(num<>1) do begin
while (num mod j=0) do   begin
if (num mod j=0) and (j in c) then      begin
inc(a[j]);
num:=num div j;
                                        end
 
 
                      end;
                       inc(j);
                end;
 
end;
 
function Stepen(i:byte;p:byte):longint;
var pres:longint;
begin
pres:=1;
while p<>0 do begin
pres:=pres*i;
dec(p);
end;
Stepen:=pres;
end;
 
var i,j,n,k:integer;
res:longint;
mastop:vector;
maslow:vector;
Mn:TBytes;
begin
Mn:=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,57,59];
res:=1;
readln(n,k);
 
for i:=n-k+1 to n do
SimpleNum(mastop,i,Mn);
 
for i:=2 to k do
SimpleNum(maslow,i,Mn);
 
for i:=1 to 60 do
mastop[i]:=mastop[i]-maslow[i];
 
for i:=1 to 60 do
res:=res*Stepen(i,mastop[i]);
 
writeln(res);
 
 
 
 
 
end.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2014, 21:24
Ответы с готовыми решениями:

Самый быстрый способ найти min
Какой самый быстрый способ найти минимальный элемент в массиве? При переборе через foreach времени тратиться слишком много.

Дайте пож. совет, нормально ли подобрана конфигурация (нужен быстрый ПК) на базе i5 и ASUS P8H77-V LE
Нужен быстрый ПК, игры вообще не нужны, поэтому без видеокарты Процессор Core i5-3450 OEM &lt;3.10GHz, 6Mb, LGA1155 (Ivy Bridge)&gt; ...

Удаленный способ к моим компам, очень необычно, нужен совет профессионалов
Добрый день. Сразу оговорюсь, что я обычный пользователь, и по уровню знаний IT 2-3 балла из 10. Мне нужна помощь и совет...

20
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
04.11.2014, 11:21
Студворк — интернет-сервис помощи студентам
И напоследок, вариант без предвычисленных чисел:
Pascal
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
55
56
procedure StrMul(var n: String; m: Word);
const Digits=['0'..'9'];
var
  i, c: Word;
  s: String;
begin
  c:=0;
  for i:=Length(n) downto 1 do
    if n[i] in Digits then begin
      c:=c+(Ord(n[i])-Ord('0'))*m;
      n[i]:=Chr(Ord('0')+c mod 10);
      c:=c div 10;
    end;
  if c>0 then begin
    Str(c,s); Insert(s,n,2-Ord(s[1] in Digits));
  end;
end;
const
  nmax=120;
  p: array [1..4] of Integer = (2,3,5,7);
var
  v: array [2..nmax] of Integer;
  n, k, nn, i, j: Integer;
  s: String[20];
  r: Int64 = 1;
begin
  FillChar(v,SizeOf(v),#0);
  ReadLn(n,k);
  if n-k>k then k:=n-k;
  for i:=k+1 to n do begin
    nn:=i;
    for j:=1 to 4 do
      while nn mod p[j]=0 do begin
        Inc(v[p[j]]); nn:=nn div p[j];
      end;
    if nn>0 then Inc(v[nn]);
  end;
  for i:=2 to n-k do begin
    nn:=i;
    for j:=1 to 4 do
      while nn mod p[j]=0 do begin
        Dec(v[p[j]]); nn:=nn div p[j];
      end;
    if nn>0 then Dec(v[nn]);
  end;
  for i:=nmax downto 2 do
    while (v[i]>0) and (r*i>r) do begin
      r:=r*i; Dec(v[i]);
    end;
  Str(r,s);
  for i:=nmax downto 2 do
    while v[i]>0 do begin
      StrMul(s,i); Dec(v[i]);
    end;
  WriteLn(s);
end.
QWord пришлось заменить на Int64, поскольку в отдельных случаях поймать переполнение при умножении не получалось, результат умножения был хотя и неправильный из-за переполнения, но все равно больше исходного.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.11.2014, 11:21

excel нужен совет по формуле
Доброго времени суток, Я тут столкнулся с одной задачей. Пользуюсь Excel 2007. Вот и сама задача. Есть несколько строк, допустим ...

Быстрый способ найти директорию стима и доты 2 на компьютере
Добрый день! Ищу быстрый способ найти директорию стима и доты 2 на компьютере. Есть идеи?

Найти другой способ вычисления интеграла
Здравствуйте! Сегодня не смогла осилить на допуске к экзамену один интеграл, думала быстро решу, но запуталась. У меня получилось, что...

Быстрый способ регистрации
Всем привет. Сразу хочу сказать, что программировать я не умею на php, язык немного читать могу, но писать не умею. Так же хочу сказать,...

Окна подтверждения, быстрый способ
как быстро создавать и использовать окно подтверждения, к примеру я выхожу их приложения и появляется типичное окно с подтверждением...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru