Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

Олимпиадная задачка... хехе... я чуть не повесился =)   Найти похожие ветки 

 
DillerXX ©   (2004-10-13 20:35) [0]

Вот текст:


Рассмотрим сумму Sn =1/(1 * 2)+2/(1 * 2 *3)+3/(1 * 2 * 3 *4)+:+( n -1)/(1 * 2 *3 * : * n ).

Требуется написать программу, которая по заданным n и k определяет k -ю цифру десятичного разложения дробной части числа Sn .

Технические требования:

Входной файл: INPUT . TXT
Выходной файл: OUTPUT . TXT

Ограничение по времени тестирования: по 5 секунд на один тест.
Формат входных данных:

Входной текстовый файл INPUT.TXT содержит две строки. В первой записано число n (2 ? n ? 2147483647), во второй k (1 ? k ? 5000).

Формат выходных данных:

Выходной файл OUTPUT . TXT должен содержать найденную цифру.

Пример файла входных данных:

3

100

Пример файла выходных данных (для приведенного выше входного файла):

3

блин, в голову ваще ничё путного не приходит... может поможете? посто интересно как ЭТО ваще решить... конечно у меня относительно маленький уровень навыков решения задач потобного типа, но всё равно по мойму очень сложная


 
Defunct ©   (2004-10-13 20:39) [1]

умножением в столбик


 
debuger ©   (2004-10-13 21:32) [2]

может длинная арифметика? 5 секунд - времени предостаточно :)


 
YurikGL ©   (2004-10-13 21:37) [3]

Может к единому знаменателю привести?


 
TUser ©   (2004-10-13 21:50) [4]

Задача не на программирование, а на математику. Надо придумать, как быстро находить
trunc(k/((n+1)(n-1)!)


 
Neoff   (2004-10-13 21:52) [5]

Sn=1-1/(n+1)!

ну вот примерно вычисляет с малой точностью...

program diller;

{$APPTYPE CONSOLE}

var
  k, n: integer;
  i, k0: integer;
  x: extended;
  res: integer;

begin
  ReadLn(n, k);
  i:=2;
  x:=1;
  k0:=0;
  while (i<=n) do
  begin
     x:=x/i;
     Inc(i);
     if x<1 then
     begin
        x:=x*10;
        inc(k0);
        if k0>k then
        begin
           res:=9;
         Break;
        end;
     end;
  end;
  if (i>n) and not (k0>k) then
  begin
     while k0<k do
     begin
        x:=frac(x);
        x:=x*10;
        inc(k0);
     end;
     res:=(10-trunc(x+0.999999999999999999)) mod 10;
  end;
WriteLn(res);
  readln;
//   readln;
end.


 
TUser ©   (2004-10-13 21:59) [6]


> Sn=1-1/(n+1)!

Я в математике не силен, но
S(n) = n/(n+1)! = 1/((n+1)*(n-1)!)

Как это привести к вашему уравнению, я не понял ...


 
Alx2 ©   (2004-10-13 22:03) [7]

Sn=1-1/n!


 
pasha_golub ©   (2004-10-13 23:51) [8]

Alx2 ©   (13.10.04 22:03) [7]
C тобой не интересно. :0)


 
Defunct ©   (2004-10-14 00:08) [9]

> Sn=1-1/n!

вот вот, [1] как раз об этом.
посчитайте 1000!
задачу можно решить только умножением в столбик больших массивов как в школе учили.


 
pasha_golub ©   (2004-10-14 00:19) [10]

Defunct ©   (14.10.04 00:08) [9]
К примеру, я на олимпиадах всегда "жульничал", когда дело касалось времени. Всегда какую-то дополнительную информацию подсчитывал при запуске программы. Так что...


 
Defunct ©   (2004-10-14 02:23) [11]

pasha_golub ©   (14.10.04 00:19) [10]

А я бывал в комиссии на таких олимпиадах, и там где видел жульничество ставил 0 баллов вместо 25. ;)


 
Alx2 ©   (2004-10-14 06:28) [12]

>Defunct ©   (14.10.04 00:08)

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

>посчитайте 1000!
>задачу можно решить только умножением в столбик больших
>массивов как в школе учили.

В условии задачи сказано, что n in [2..2^31];
Как вы в столбик будете считать (2^31)! - не представляю.


 
TUser ©   (2004-10-14 07:27) [13]


> Мне кажется, должен быт итеративный метод получения десятичных
> цифр.

Вообще, если вычитслить порядок этого факториала (что просто), то можно сразу будет сказать, что определенное (и большое) кол-во самых первых десятичных цифр - это 9.


 
SergP.   (2004-10-14 08:33) [14]


> [13] TUser ©   (14.10.04 07:27)


Что-то я не уверен в этом...


 
Alx2 ©   (2004-10-14 09:03) [15]

>Defunct ©   (14.10.04 00:08)
Хотя возможно попробовать и "столбиком".
если n>1775 (следует из форулы Стирлинга) то для любого k in [1..5000] k-я цифра = 9.

А факториалы 1! .. 1775! имеют более-менее разумные значения :)


 
Neoff   (2004-10-14 09:31) [16]

ЗАЧЕМ считать вам n=2^32-1? да при n>1000 уже ясно что 5000-символ не будет меняться.
an=n/(n+1)!  причем = 1/(n+1)(n-1)! как сказал товарищ :)
n/(n+1)! = (n+1)/(n+1)! - 1/(n+1)! = 1/n!-1/(n+1)!
отсюда когда мы возьмём сумму, сократится всё, кроме
1-1/(n+1)! а не 1-1/n!.

Я могу доделать эту задачу с длинной арифметикой но честно скажу - мне лень, у меня ещё стопка задач лежит. Считаем эту задачу полностью разобранной.


 
Alx2 ©   (2004-10-14 09:32) [17]

Вот условие, когда считать частное не нужно:

if (n>1775) or (k=< trunc ( ((1/2+n)*ln(n)-n+1/2*ln(2*Pi))/ln(10) )) then
Result := 9; // k-я цифра = 9


 
Alx2 ©   (2004-10-14 09:42) [18]

>Neoff   (14.10.04 09:31)

Я брал сумму k/(k+1)!, k = 1 .. n - 1 (в условии последний член = (n-1)/n! ) ; Получилось  Sn = 1 - 1/n!


 
Veinamond   (2004-10-14 09:59) [19]

а производящие функции тут не подойдут? можно, в принципе, попробовать это через exp выразить. вопрос только в том, откуда взять вычисленное число е с точностью до 5000 знаков после запятой.
вообще, мне кажется, возможно, ошибочно, что невелика будет разница, вычислять это число или определять случайным образом при больших n и k:)


 
Veinamond   (2004-10-14 10:03) [20]

упс. и правда, ошибочно. ясно.


 
TUser ©   (2004-10-14 11:02) [21]


> откуда взять вычисленное число е с точностью до 5000 знаков
> после запятой

Да не жалко, запоминай :)))
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320 030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841 675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067 371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644 549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625 094431173012381970684161403970198376793206832823764648042953118023287825098194558153017567173613320698112509961818815930 416903515988885193458072738667385894228792284998920868058257492796104841984443634632449684875602336248270419786232090021 609902353043699418491463140934317381436405462531520961836908887070167683964243781405927145635490613031072085103837505101 157477041718986106873969655212671546889570350354021234078498193343210681701210056278802351930332247450158539047304199577 770935036604169973297250886876966403555707162268447162560798826517871341951246652010305921236677194325278675398558944896 970964097545918569563802363701621120477427228364896134225164450781824423529486363721417402388934412479635743702637552944 483379980161254922785092577825620926226483262779333865664816277251640191059004916449982893150566047258027786318641551956 532442586982946959308019152987211725563475463964479101459040905862984967912874068705048958586717479854667757573205681288 459205413340539220001137863009455606881667400169842055804033637953764520304024322566135278369511778838638744396625322498 506549958862342818997077332761717839280349465014345588970719425863987727547109629537415211151368350627526023264847287039 207643100595841166120545297030236472549296669381151373227536450988890313602057248176585118063036442812314965507047510254 465011727211555194866850800368532281831521960037356252794495158284188294787610852639813955990067376482922443752871846245 780361929819713991475644882626039033814418232625150974827987779964373089970388867782271383605772978824125611907176639465 070633045279546618550966661856647097113444740160704626215680717481877844371436988218559670959102596862002353718588748569 652200050311734392073211390803293634479727355955277349071783793421637012050054513263835440001863239914907054797780566978 533580489669062951194324730995876552368128590413832411607226029983305353708761389396391779574540161372236187893652605381 558415871869255386061647798340254351284396129460352913325942794904337299085731580290958631382683291477116396337092400316 894586360606458459251269946557248391865642097526850823075442545993769170419777800853627309417101634349076964237222943523 661255725088147792231519747780605696725380171807763603462459278778465850656050780844211529697521890874019660906651803516 501792504619501366585436632712549639908549144200014574760819302212066024330096412704894390397177195180699086998606636583 232278709376502260149291011517177635944602023249300280401867723910288097866605651183260043688508817157238669842242201024 950551881694803221002515426494639812873677658927688163598312477886520141174110913601164995076629077943646005851941998560 162647907615321038727557126992518275687989302761761146162549356495903798045838182323368612016243736569846703785853305275 833337939907521660692380533698879565137285593883499894707416181550125397064648171946708348197214488898790676503795903669 672494992545279033729636162658976039498576741397359441023744329709355477982629614591442936451428617158587339746791897571 211956187385783644758448423555581050025611492391518893099463428413936080383091662818811503715284967059741625628236092168 075150177725387402564253470879089137291722828611515915683725241630772254406337875931059826760944203261924285317018781772 960235413060672136046000389661093647095141417185777014180606443636815464440053316087783143174440811949422975599314011888 683314832802706553833004693290115744147563139997221703804617092894579096271662260740718749975359212756084414737823303270 330168237193648002173285734935947564334129943024850235732214597843282641421684878721673367010615094243456984401873312810 107945127223737886126058165668053714396127888732527373890392890506865324138062796025930387727697783792868409325365880733 988457218746021005311483351323850047827169376218004904795597959290591655470505777514308175112698985188408718564026035305 583737832422924185625644255022672155980274012617971928047139600689163828665277009752767069777036439260224372841840883251 848770472638440379530166905465937461619323840363893131364327137688841026811219891275223056256756254701725086349765367288 605966752740868627407912856576996313789753034660616669804218267724560530660773899624218340859882071864682623215080288286 359746839654358856685503773131296587975810501214916207656769950659715344763470320853215603674828608378656803073062657633 469774295634643716709397193060876963495328846833613038829431040800296873869117066666147


 
Neoff   (2004-10-14 11:39) [22]

Alx2, thx, действительно 1-1/n! но в программе у меня так и есть :) можешь проверить.


 
Veinamond   (2004-10-14 13:02) [23]

TUser
вот спасибо:) как бы я жил дальше без этого знания:) запоминаю:)


 
Vlad Oshin ©   (2004-10-14 13:57) [24]

http://pfish.rcdem.ru/09.06.2004/1


 
Igorek ©   (2004-10-14 15:12) [25]


> DillerXX ©   (13.10.04 20:35)  

Не АСМ часом? Какой регион? Дай линк на страницу соревнований.


 
Alx2 ©   (2004-10-14 21:21) [26]

 


 
Defunct ©   (2004-10-15 00:17) [27]

Alx2 ©   (14.10.04 06:28) [12]
> Мне кажется, должен быть итеративный метод получения десятичных цифр.

Конкретно эту задачу раньше не встречал. Видел подобную:
k-ую цифру из n! за ограниченное время. Решалась умножением в столбик. И тестовое задание было кажись n={3,10, 40, 375, 1000}, k=1.

PS: на время при проверке задания особо никто не смотрел, 5 сек. или 30 сек, все понимали, что время больше зависит от машины и от компилятора.


 
Alx2 ©   (2004-10-15 00:22) [28]

>Defunct ©   (15.10.04 00:17) [27]
Оно уже стало не интерсно. Осталась рутина. Сорри за то, что я не учел сразу диапазон допустимых величин k и n.


 
паша_голубь (из другого места)   (2004-10-15 01:26) [29]

Defunct ©   (14.10.04 02:23) [11]
Хе-хе, дай то Бог...  Не то что бы я жульничал, часто у меня естество бурлило...

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

Мне известно решето Эратосфена, но извините, мудрить с массивом на 100000 элементов это против моей природы. С другой стороны, задача очень уж специфическая. Один знает, а другой - нет. Я счиатю, что задача должна быть полем для поиска, а не беговой дорожкой шииной в 40 см.

ЗЫ Во как... :0)


 
Defunct ©   (2004-10-15 01:49) [30]

> мудрить с массивом на 100000 элементов это против моей природы.

1000! - всего 2568 десятичных цифр.
10000! - 35660 десятичных цифр.

так что не так уж много элементов массива.
С другой стороны без массива вы не скажете цифру k1=2 для 10000! ;)

> Я считаю, что задача должна быть полем для поиска, а не беговой дорожкой шииной в 40 см.

А чем не поле для поиска?
Умножение в столбик имеет столько разных реализаций, аж глаза разбегаются.

> Один знает, а другой - нет.
И главное все его знают (проходят в кажется в 3-ем классе на уроках математики)

> ЗЫ Во как... :0)
Вот так ;)


 
pasha_golub ©   (2004-10-16 04:24) [31]

Defunct ©   (15.10.04 01:49) [30]
Я имел ввиду задачу
Ну, например, задача вывести все простые числа в таком-то диапазоне, не используя операций деления и умножения.

Именно ее. И про нее я разглагольствовал. Наверно, не четкао вырвзил мысль.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.037 c
14-1098381867
uji
2004-10-21 22:04
2004.11.07
имортист


14-1097245476
Поручик
2004-10-08 18:24
2004.11.07
Игры ZX Spectrum


3-1097481683
Jann
2004-10-11 12:01
2004.11.07
работа с таблицей


3-1097070131
Пуртик
2004-10-06 17:42
2004.11.07
Как ускорить закачку?


1-1098791757
Maxximusss
2004-10-26 15:55
2004.11.07
Сделать MainForm невидимым.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский