#P1783. Fractran

    ID: 784 传统题 1000ms 256MiB 尝试: 2 已通过: 1 难度: 10 上传者: 标签>Ulm Local 2004分数运算序列生成2的幂次检测

Fractran

分数游戏问题描述

游戏规则 给定一组分数 f1,f2,,fkf_1, f_2, \ldots, f_k 和起始整数 NN,游戏按以下步骤进行:

  1. 初始值设为 S0=NS_0 = N
  2. 在每一步,用当前值 SjS_j 乘以分数列表中第一个能使其结果为整数的分数 fif_i,得到 Sj+1=fi×SjS_{j+1} = f_i \times S_j
  3. 当没有分数能产生整数结果时,游戏终止

数学表达式为:

$$S_{j+1} = f_i \times S_j \quad \text{当且仅当} \quad f_i \times S_j \in \mathbb{Z} \ \text{且} \ \forall_{l < i} \ f_l \times S_j \notin \mathbb{Z} $$

示例 给定分数列表: $\frac{170}{39}, \frac{19}{13}, \frac{13}{17}, \frac{69}{95}, \frac{19}{23}, \frac{1}{19}, \frac{13}{7}, \frac{1}{3}$

N=21N=21 开始,生成的序列为: (21,39,170,130,190,138,114,6,2)(21, 39, 170, 130, 190, 138, 114, 6, 2)

问题要求 对于每组测试数据,找出序列中前 mm 个形如 2e2^e 的数字,并输出它们的指数 e1,e2,,eme_1, e_2, \ldots, e_m

输入格式 每组测试数据包含:

  1. 三个整数 mm, NN, kk1m401 \leq m \leq 401N10001 \leq N \leq 10001k1001 \leq k \leq 100
  2. kk 个分数,每个分数以分子、分母形式给出(均为小于1000的正整数且互质)
  3. 输入以一行单独的0结束

输出格式 对每组测试数据,输出一行 mm 个整数,表示前 mm 个2的幂次数的指数。

输入样例

1 21 8 170 39 19 13 13 17 69 95 19 23 1 19 13 7 1 3
20 2 14 17 91 78 85 19 51 23 38 29 33 77 29 95 23 77 19 1 17 11 13 13 11 15 2 1 7 55 1
0

输出样例

1
1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67

来源 Ulm Local 2004