Подтвердить что ты не робот

Я успешно скомпилировал свою программу. Теперь как мне его запустить?

Я хочу решить Project Euler Проблема 1:

Если мы перечислим все натуральные числа ниже 10, кратные 3 или 5, получим 3, 5, 6 и 9. Сумма этих кратных значений равна 23.

Найдите сумму всех кратных 3 или 5 ниже 1000.

Здесь мой код:

\documentclass[10pt,a4paper]{article}
\usepackage{hyperref}
\newcommand*\rfrac[2]{{}^{#1}\!/_{#2}}
\title{Solution to Project Euler Problem 1}
\author{Aadit M Shah}
\begin{document}
\maketitle
We want to find the sum of all the multiples of 3 or 5 below 1000. We can use the formula of the $n^{th}$ triangular number\footnote{\url{http://en.wikipedia.org/wiki/Triangular_number}} to calculate the sum of all the multiples of a number $m$ below 1000. The formula of the $n^{th}$ triangular number is:

\begin{equation}
T_n = \sum_{k = 1}^n k = 1 + 2 + 3 + \ldots + n = \frac{n (n + 1)}{2}
\end{equation}

If the last multiple of $m$ below 1000 is $x$ then $n = \rfrac{x}{m}$. The sum of all the multiples of $m$ below 1000 is therefore:

\begin{equation}
m \times T_{\frac{x}{m}} = m \times \sum_{k = 1}^{\frac{x}{m}} k = \frac{x (\frac{x}{m} + 1)}{2}
\end{equation}

Thus the sum of all the multiples of 3 or 5 below 1000 is equal to:

\begin{equation}
3 \times T_{\frac{999}{3}} + 5 \times T_{\frac{995}{5}} - 15 \times T_{\frac{990}{15}} = \frac{999 \times 334 + 995 \times 200 - 990 \times 67}{2}
\end{equation}
\end{document}

Я скомпилировал его с помощью pdflatex:

$ pdflatex Problem1.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/Arch Linux) (preloaded format=pdflatex)
.
.
.
Output written on Problem1.pdf (1 page, 106212 bytes).
Transcript written on Problem1.log.

Он сгенерировал следующий выходной файл PDF вместе с кучей других файлов с страшными расширениями:

Solution to Project Euler Problem 1

Как запустить этот PDF файл, чтобы он вычислил решение? Я знаю решение проблемы, но я хочу знать, как выполнить файл PDF, чтобы вычислить решение.

Причина, по которой я предпочитаю LaTeX над другими языками программирования, заключается в том, что он поддерживает грамотное программирование, подход к программированию, введенный Дональд Кнут, создатель TeX и один из величайших компьютерные ученые всех времен.

Изменить: Также неплохо было бы распечатать вычисленное решение либо на экране, либо на бумаге. Вычисление решения без печати полезно для обогрева комнаты, но оно настолько горячее уже с наступлением лета и глобального потепления. Кроме того, печать решения научит меня, как писать приветственную программу мира в LaTeX.

4b9b3361

Ответ 1

Итак, сегодня, похоже, безопасный день для решения этой проблемы...


OP, похоже, не настолько хорошо разбирается в PDF файлах. Однако он, очевидно, довольно грамотный парень LaTeX. Это значит, что он также должен хорошо знать TeX, учитывая, что он настолько полон поклонника Дональда Кнута...

Так много для предварительных. Теперь для настоящего мяса.

Во-первых,, чтобы процитировать официальную спецификацию PDF-1.7:

PDF не является языком программирования, а файл PDF не является программой.
                                                      (стр. 92, раздел 7.10.1)

Однако предварительный детектив формата PDF, PostScript, IS a Turing-complete язык программирования... Turing-complete, так же как TeX, создание Дональд Кнут, один из величайших компьютерных ученых всех времен.

Файлы PostScript, с другой стороны, ARE, и могут легко выполняться с помощью принтеров PostScript (хотя это время выполнения не может быть надежно определено заранее).

Следовательно, и второй, OP должен иметь возможность найти способ конвертировать свой высокоуровневый код LaTeX в низкоуровневый TeX-код. Этот код должен испускать программу PostScript, которая, в свою очередь, может быть выполнена принтером PostScript. Написание этого TeX-кода должно быть тривиальным для кого-то вроде OP, как только ему будет предоставлен код PostScript, который должен быть результатом его кода TeX.

Я сам не так хорошо разбираюсь в аспекте TeX этой процедуры решения проблем. Однако я могу помочь с PostScript.

PostScript, который должен произвести код OP TeX, выглядит следующим образом (наверняка возможны более оптимизированные версии - это только первый, быстрый и грязный снимок):

%!PS

% define variables
/n1 999 def
/t1 334 def
/n2 995 def
/t2 200 def
/n3 990 def
/s1  67 def
/t3   2 def

% run the computational code
n1 t1 mul
n2 t2 mul
n3 s1 mul
sub
add
t3    div

% print result on printer, not on <stdout>
/Helvetica findfont
24 scalefont
setfont
30 500 moveto
(Result for 'Project Euler Problem No. 1' :) show 
/Helvetica-Bold findfont
48 scalefont
setfont
80 400 moveto
(                   ) cvs show 
showpage

Отправьте этот PostScript-код на принтер PostScript, и он вычислит и распечатает решение.


Update

Чтобы ответить на один из комментариев: если вы замените последний раздел кода PostScript, начинающийся с /Helvetica findfont простым инструктором print, он не будет делать то, что вы можете себе представить.

print не выводит принтер на печать. Вместо этого он просит интерпретатор PostScript записать самый верхний элемент в стеке (который должен быть (string)!) На стандартный выходной канал. (Если самый верхний элемент в стеке не имеет типа (string), он вызывает ошибку typecheck PostScript.)

Таким образом, отправка измененного файла PostScript (где print заменила последний раздел моего PS-кода), принтер не будет работать (если только этот принтер не поддерживает интерактивный режим executive PostScript, который не является стандартной частью языка PostScript). Однако он будет работать, если вы загрузите этот файл в Ghostscript в терминале или в окне cmd.exe.