#P6589. 复数

复数

题目描述

如你所知,复数通常表示为实部和虚部之和。3+2i3 + 2i 就是一个例子,其中 33 是实部,22 是虚部,ii 是虚数单位。

给定一个素数 pp 和一个正整数 nn,你的程序需要输出满足以下条件的所有复数的乘积:

  • 实部和虚部都是小于等于 nn 的非负整数。
  • 实部和虚部中至少有一个不是 pp 的倍数。

例如,当 p=3p = 3n=1n = 1 时,满足条件的复数有 11(即 1+0i1 + 0i)、ii(即 0+1i0 + 1i)和 1+i1 + i(即 1+1i1 + 1i),这些数的乘积,即 1×i×(1+i)1 \times i \times (1 + i),等于 1+i-1 + i

输入

输入包含一个测试用例,格式如下:

p np\ n

其中,pp 是小于 5×1055 \times 10^5 的素数。nn 是小于等于 101810^{18} 的正整数。

输出

在一行中输出两个用空格分隔的整数。当所有满足条件的复数的乘积为 a+bia + bi 时,第一个整数是 aapp 的结果,第二个整数是 bbpp 的结果。这里,xxyy 的含义是介于 00y1y - 1(包括两端)之间的整数 zz,使得 xzx - z 能被 yy 整除。

正如题目描述中所示,当 p=3p = 3n=1n = 1 时,需要计算的乘积是 1+i-1 + i。然而,由于 1-133 等于 22,所以示例输出中显示的是 2211

3 1
2 1
5 5
0 0 
499979 1000000000000000000
486292 0