Problem Statement
You are given two
Let D[i] be the number of permutations of the set {1,2,...,n+i} such that the first i values are not fixed points of the permutation. Formally, we are interested in permutations p such that for each j between 1 and i, inclusive, we have p(j) != j.
Next, let B[i] = (D[i] / n!) modulo (10^9 + 7). Note that it can be shown that D[i] divided by n! is always an integer.
Compute and return the bitwise xor of the values B[i] for i between 1 and m, inclusive.
Definition
- Class:
- DerangementsStrikeBack
- Method:
- count
- Parameters:
- int, int
- Returns:
- int
- Method signature:
- int count(int n, int m)
- (be sure your method is public)
Notes
- Author's solution explicitly computes each of the values B[i]. Bitwise xor is only used to reduce the size of the output.
Constraints
- n will be between 0 and 1,000,000,000, inclusive.
- m will be between 1 and 100,000, inclusive.
Examples
0
3
Returns: 3
As we have n=0, we are counting derangements, i.e., permutations with no fixed points. We can easily see that D[1]=0, D[2]=1, and D[3]=2. As 0! = 1, we also have B[1]=0, B[2]=1, and B[3]=2. Thus, the correct return value is (0 xor 1 xor 2) = 3.
1
3
Returns: 9
3
3
Returns: 73
4
1
Returns: 4
70
39
Returns: 319676671
0
12345
Returns: 683702962
0
100000
Returns: 1036996263
1000000000
1
Returns: 1000000000
1000000000
100000
Returns: 542069369
370242812
88757
Returns: 420979659
507562699
4885
Returns: 73206930
939849878
88309
Returns: 731267126
77169765
4437
Returns: 127255300
919522361
55157
Returns: 472697994
50
19
Returns: 327679888
15
47
Returns: 823622925
31
21
Returns: 349396594
46
45
Returns: 569066966
5821
55390
Returns: 618778242
55229
81
Returns: 348379946
500984
75
Returns: 759902809
13
100
Returns: 890931655
4
34
Returns: 607287887
9513
23
Returns: 391052831
8356001
43
Returns: 287781834
1
618
Returns: 249120489
86607
64
Returns: 670835158
801491399
6960
Returns: 952083914
333636
8
Returns: 715536442
3654
1170
Returns: 1040155257
884614
6829
Returns: 954332261
1
117
Returns: 513531619
12031991
23221
Returns: 927646603
50963
3
Returns: 853105813
26792
963
Returns: 860533662
254088346
9048
Returns: 134791655
38
28
Returns: 810689834
44611284
954
Returns: 199354260
58585
45
Returns: 978498919
531068323
15
Returns: 409378080
5132503
23363
Returns: 512253022
54
61
Returns: 949331111
7975133
56048
Returns: 648887522
8330567
6506
Returns: 829618358
806401
59077
Returns: 789895885
16518307
275
Returns: 714902137
850
26740
Returns: 592610554
735
5
Returns: 553915785
997051
8
Returns: 318116342
117
6
Returns: 753534616
118
28
Returns: 303125841
925658423
917
Returns: 170184929
734
1
Returns: 734
7
67
Returns: 662733229
3683
2681
Returns: 441849391
5637237
8
Returns: 333022216
64455463
5439
Returns: 1046244009
970189304
95
Returns: 984052749
7662
34114
Returns: 340199527
750354
64064
Returns: 408203866
938034
6964
Returns: 1015366012
468125115
2
Returns: 376601084
260
8906
Returns: 725632693
0
422
Returns: 462313885
643
10
Returns: 562043046
255936040
1
Returns: 255936040
291837066
968
Returns: 90948002
73708
174
Returns: 1043100958
337971344
10
Returns: 449306760
2904653
89
Returns: 1029492575
26140195
5199
Returns: 874672356
82559
6218
Returns: 833797401
16332905
888
Returns: 112847748
36695
357
Returns: 951859002
922
440
Returns: 31154663
126122924
1354
Returns: 678015142
3
307
Returns: 486451410
293196087
851
Returns: 253877783
67
100
Returns: 111488981
5386
77017
Returns: 389256855
502025
99
Returns: 169027416
86413280
33629
Returns: 594814767
9
8
Returns: 639682824
227254
1968
Returns: 353895834
6569806
3
Returns: 325907047
9306
657
Returns: 127406496
10
83
Returns: 136970137
66
6243
Returns: 754496557
650337
97811
Returns: 579399286
5030926
2948
Returns: 333341744
951
6325
Returns: 899796375
4
67
Returns: 54082159
93604
2538
Returns: 1010094588
25
99831
Returns: 377347236
403739776
4630
Returns: 636778756
46
9
Returns: 367112555
4713
7
Returns: 327362714
1291
57214
Returns: 116956159
9174
3070
Returns: 301518109
497466804
433
Returns: 823675836
1
9198
Returns: 518540720
90
853
Returns: 611155561
0
7
Returns: 1553
956528
7
Returns: 560587842
10335
60
Returns: 838758844
6157973
110
Returns: 517831857
17
2
Returns: 290
8551010
7
Returns: 165415308
5492
9399
Returns: 657208193
5471
400
Returns: 48502250
622497343
50539
Returns: 163197443
3
1043
Returns: 51294610
66
41
Returns: 309230698
64597
4556
Returns: 621476850
924148341
80
Returns: 332157824
2
774
Returns: 611521173
2
1
Returns: 2
5
3
Returns: 249