#P3361. Gaussian Prime Factors

Gaussian Prime Factors

题目描述

设 (a, b, c, d) 为整数。若存在整数 (e) 和 (f) 使得 (c + dj = (a + bj)(e + fj)),则称复数 (a + bj)(其中 (j^2 = -1))是 (c + dj) 的因数。
当复数 (a + bj)((a, b) 为整数)的因数仅有 (1, -1, -a - bj) 和 (a + bj) 时,称其为高斯素数
以下是高斯素数的例子:(1 + j, 1 - j, 1 + 2j, 1 - 2j, 3, 7)。

整数 (5) 的高斯素因数分解为:

  • (1 + 2j) 和 (1 - 2j),或
  • (2 + j) 和 (2 - j),或
  • (-1 - 2j) 和 (-1 + 2j),或
  • (-2 - j) 和 (-2 + j)。

请编写程序,找出正整数 (n) 的所有高斯素因数。

输入格式

每个测试用例占一行,包含一个正整数 (n)。

输出格式

每个测试用例输出一行,为 (n) 的高斯素因数。若 (a + bj) 是高斯素因数,则需满足:

  • 当 (b \neq 0) 时,(a > 0) 且 (|b| \geq a);
  • 当 (b = 0) 时,输出为 (a)。

输出的高斯素因数需按以下规则排序:

  1. 先按实部 (a) 升序排列;
  2. 若实部相同,按虚部 (b) 的绝对值升序排列;
  3. 若存在共轭因数(如 (a + bj) 和 (a - bj)),正虚部的因数排在负虚部之前。

输入数据示例 1

2  
5  
6  
700  

输出数据示例 1

Case #1: 1+j, 1-j  
Case #2: 1+2j, 1-2j  
Case #3: 1+j, 1-j, 3  
Case #4: 1+j, 1-j, 1+2j, 1-2j, 7  

来源

马尼拉 2006