Problem Statement
Consider a sequence {x0, x1, x2, ...}. A relation that defines some term xn in terms of previous terms is called a recurrence relation. A linear recurrence relation is one where the recurrence is of the form xn = ck-1xn-1 + ck-2xn-2 + ... + c0xn-k, where all the ci are real-valued constants, k is the length of the recurrence relation, and n is an arbitrary positive integer which is greater than or equal to k.
You will be given a
Note that the value of X modulo 10 equals the last digit of X if X is non-negative. However, if X is negative, this is not true; instead, X modulo 10 equals ((10 - ((-X) modulo 10)) modulo 10). For example, (-16) modulo 10 = ((10 - (16 modulo 10)) modulo 10) = (10 - 6) modulo 10 = 4.
More specifically, if coefficients is of size k, then the recurrence relation will be
- xn = coefficients[k - 1] * xn-1 + coefficients[k - 2] * xn-2 + ... + coefficients[0] * xn-k.
For example, if coefficients = {2,1}, initial = {9,7}, and N = 6, then our recurrence relation is xn = xn-1 + 2 * xn-2 and we have x0 = 9 and x1 = 7. Then x2 = x1 + 2 * x0 = 7 + 2 * 9 = 25, and similarly, x3 = 39, x4 = 89, x5 = 167, and x6 = 345, so your method would return (345 modulo 10) = 5.
Definition
- Class:
- RecurrenceRelation
- Method:
- moduloTen
- Parameters:
- int[], int[], int
- Returns:
- int
- Method signature:
- int moduloTen(int[] coefficients, int[] initial, int N)
- (be sure your method is public)
Notes
- (a + b) modulo x = ( (a modulo x) + (b modulo x) ) modulo x for any values of a, b, and x.
Constraints
- coefficients will have between 1 and 10 elements, inclusive.
- initial will have the same number of elements as coefficients.
- Each element of coefficients will be between -1000 and 1000, inclusive.
- Each element of initial will be between -1000 and 1000, inclusive.
- N will be between 0 and 100000, inclusive.
Examples
{2,1}
{9,7}
6
Returns: 5
As described in the problem statement.
{1,1}
{0,1}
9
Returns: 4
This is the famous Fibonacci sequence, which goes 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
{2}
{1}
20
Returns: 6
This sequence is 1, 2, 4, 8, 16, ...
{2}
{1}
64
Returns: 6
Watch out for overflow.
{1,2,3,4,5,6,7,8,9}
{9,8,7,6,5,4,3,2,1}
96837
Returns: 3
{25,143}
{0,0}
100000
Returns: 0
This sequence will always be zero.
{9,8,7,6,5,4,3,2,1,0}
{1,2,3,4,5,6,7,8,9,10}
654
Returns: 5
{901,492,100}
{-6,-15,-39}
0
Returns: 4
Watch out for negative numbers.
{901,492,100}
{5,-15,-39}
2
Returns: 1
{-2}
{-4}
3
Returns: 2
{4,9,-150,-30}
{63,10,-199,593}
83
Returns: 1
{157,-358,1000,29,-599}
{28,0,53,-66,-599}
93753
Returns: 9
{999,999,999,999,999,999,999,999,999,999}
{999,999,999,999,999,999,999,999,999,999}
99999
Returns: 9
{217, 588, 967, -12, -659, 764, -778, -529}
{-475, -963, -265, -270, -557, 365, 843, 342}
28387
Returns: 8
{771}
{-891}
73266
Returns: 9
{-377, 442, -643, 692, -569}
{-713, 267, 771, 950, -535}
78556
Returns: 5
{-941, -246, -272, 47, 575, -667, 726, 54, -873, 796}
{-559, -396, -347, -509, -174, -955, -982, 496, -733, -693}
6441
Returns: 1
{574, -878, -582, 287, -871, -109, 950, -349, 667}
{-532, 265, -447, -107, 346, -559, 176, -447, -775}
2239
Returns: 5
{-729, 576, -843}
{105, -118, 260}
71291
Returns: 1
{568, -696, 286, 521}
{-183, -302, 984, 261}
69507
Returns: 3
{711, -847, -336, 334, -787, 540, -886, -746, 808}
{-777, -842, 660, 315, -443, 593, 368, 247, 969}
8286
Returns: 5
{478, -555, 887, 322, -452}
{189, 339, 731, 407, 416}
57268
Returns: 9
{639, -584}
{925, 860}
70138
Returns: 5
{-384, 706, -912, -643, -229, -379, -566}
{-397, -810, -280, -388, -483, -429, -407}
12128
Returns: 9
{-150, 716, 96, -624, -527, -901, -662, 507}
{151, 203, -42, 399, -501, 134, 875, -46}
38428
Returns: 7
{144, 932, -708, 576}
{-877, 58, -298, -87}
68447
Returns: 8
{506, -560, 561}
{-148, 913, -844}
24724
Returns: 6
{-329, 612, 991, 835, 586, -161, -447, 744, -403}
{492, 144, 711, -672, 341, 621, 983, -516, -964}
73462
Returns: 3
{-494, 297, 984, 925}
{575, -988, 294, 101}
56215
Returns: 5
{758, -912}
{678, 369}
50217
Returns: 4
{-363, 521, 555, -43, 899, -852}
{-344, 780, -641, -893, -743, -505}
14068
Returns: 7
{-775, 581, -631, -628}
{-643, 522, 122, 851}
39505
Returns: 7
{-110, 57, -94, -387}
{980, -22, 879, 100}
69226
Returns: 4
{-893, -798, 605}
{-774, -813, -466}
21337
Returns: 5
{-647, 251, -246, 53, 109, -393, -566, -602, 692}
{721, -275, 259, 656, -423, 903, 706, 179, -191}
28546
Returns: 1
{-65, 819, 904, 229, -446, 764, 708, 190}
{678, 42, -980, 66, 988, -93, -428, -539}
20988
Returns: 2
{674, -623, -601, 544, 991, 606, -217, -915, 139}
{-60, -720, -189, -203, 235, -592, -460, -399, 547}
5036
Returns: 4
{-831, 913, 640, -939, 639}
{176, 490, 620, -614, 450}
1166
Returns: 4
{-611, 593, -69, 142, 928, -114, -155, 311}
{-437, -655, 136, -79, -253, -290, -471, 984}
41238
Returns: 3
{909, -336, -595, -3, 805, 474, 948}
{359, 378, 862, -533, -365, 991, 863}
52247
Returns: 7
{765}
{42}
16129
Returns: 0
{520, 210, 984, -508, 596, -661, -403, -562}
{274, 964, -946, -149, 682, 61, -439, 2}
95186
Returns: 6
{469, 628, 775}
{784, -58, 132}
72912
Returns: 4
{4,-6}
{2,3}
2
Returns: 0
Notice that -10 modulo 10 = 0.
{ 901, 492, 100 }
{ -6, -15, -39 }
0
Returns: 4
{ 2 }
{ -111 }
0
Returns: 9
{ 2 }
{ 1 }
20
Returns: 6
{ 2 }
{ 1 }
64
Returns: 6
{ 2 }
{ -100 }
0
Returns: 0
{ 1, 1 }
{ 1, 2 }
0
Returns: 1
{ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
654
Returns: 5
{ 2 }
{ 1 }
9999
Returns: 8
{ 45, 23 }
{ 43, 55 }
0
Returns: 3
{ 901, 492, 100 }
{ -6, -15, -39 }
1
Returns: 5
{ -10, -10 }
{ 1, 1 }
10000
Returns: 0
{ 1 }
{ -1 }
0
Returns: 9
{ 0, 0, 0 }
{ 1, 2, 3 }
99999
Returns: 0
{ 2, 1 }
{ 9, 7 }
0
Returns: 9
{ 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 }
{ 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 }
100000
Returns: 0
{ 1, 1, 1 }
{ 9, 1, 1 }
0
Returns: 9
{ 34, 43 }
{ -199, 323 }
0
Returns: 1
{ 7 }
{ 1 }
100000
Returns: 1
{ -32, -34 }
{ -199, -32 }
0
Returns: 1
{ 2 }
{ 1 }
108
Returns: 6
{ 25, 143, -111, -432, -312, -999 }
{ -818, -13, -312, -823, -211, 987 }
100000
Returns: 8
{ -16 }
{ -16 }
0
Returns: 4
{ 25, 143, -123, -234, -345, -567 }
{ -12, -982, -345, 247, -232, -987 }
100000
Returns: 0
{ 10, 10 }
{ 10, 10 }
0
Returns: 0
{ 2 }
{ 2 }
0
Returns: 2
{ 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 }
{ 1000, 1000, 1000, 1000, 999, 1000, 1000, 1000, 1000, 1000 }
100000
Returns: 0
{ 1, 1 }
{ 10, 10 }
1
Returns: 0
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 }
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 }
3
Returns: 4
{ 1, 2, 3 }
{ -1, -10, -2 }
1
Returns: 0
{ 1, 1 }
{ 12, 12 }
1
Returns: 2