APPENDIX A
ACM PROGRAMMING PROBLEMS
183
The Input
The input consists of a sequence of integer pairs
n
and
p
with each integer on a line by
itself. For all such pairs
,
and there exists an integer
k
,
such that
.
The Output
For each integer pair
n
and
p
the value
should be printed, i.e., the number
k
such that
.
Sample Input
2
16
3
27
7
4357186184021382204544
Sample Output
4
3
1234
Roman Roulette
The historian Flavius Josephus relates how, in the RomanoJewish conflict of 67 A.D., the
Romans took the town of Jotapata which he was commanding. Escaping, Jospehus found
himself trapped in a cave with 40 companions. The Romans discovered his whereabouts and
invited him to surrender, but his companions refused to allow him to do so. He therefore
suggested that they kill each other, one by one, the order to be decided by lot. Tradition has it
that the means for effecting the lot was to stand in a circle, and, beginning at some point,
count round, every third person being killed in turn. The sole survivor of this process was
Josephus, who then surrendered to the Romans. Which begs the question: had Josephus
previously practised quietly with 41 stones in a dark corner, or had he calculated
mathematically that he should adopt the 31st position in order to survive?
This preview has intentionally blurred sections. Sign up to view the full version.
View Full DocumentAPPENDIX A
ACM PROGRAMMING PROBLEMS
184
Having read an account of this gruesome event you become obsessed with the fear that you
will find yourself in a similar situation at some time in the future. In order to prepare yourself
for such an eventuality you decide to write a program to run on your handheld PC which will
determine the position that the counting process should start in order to ensure that you will
be the sole survivor.
In particular, your program should be able to handle the following variation of the processes
described by Josephus.
n
> 0 people are initially arranged in a circle, facing inwards, and
numbered from 1 to
n
. The numbering from 1 to
n
proceeds consecutively in a clockwise
direction. Your allocated number is 1. Starting with person number
i
, counting starts in a
clockwise direction, until we get to person number
k
(
k
> 0), who is promptly killed. We then
proceed to count a further
k
people in a clockwise direction, starting with the person
immediately to the left of the victim. The person number
k
so selected has the job of burying
the victim, and then returning to the position in the circle that the victim had previously
occupied. Counting then proceeeds from the person to his immediate left, with the
k
th person
being killed, and so on, until only one person remains.
For example, when
n
= 5, and
k
= 2, and
i
= 1, the order of execution is 2, 5, 3, and 1. The
survivor is 4.
Input and Output
This is the end of the preview.
Sign up
to
access the rest of the document.
 Spring '11
 Decimal, Long integer, COMMON CODES/ROUTINES

Click to edit the document details