#2940. 质因数转化

质因数转化

题目描述

在数字变换系统中,数字之间的转化遵循以下规则:

  1. 任意正整数 xx(x>1x > 1)可以转化为它的任意一个质因数(能整除 xx 的质数),反之亦然(质因数也能转化为 xx)。例如:100 的质因数为 2 , 5 ,所以 100可以变为 2 ,也可以变为 5 。反过来说 5 或者 2 也可以变为 100 。
  2. 若 xx 是质数,则 xx 可以转化为 11,反之 11 可以转化为任意质数。

给定正整数 nn 和起始数字 xx(1≤x≤n1 \leq x \leq n),请计算 xx 转化为 11 到 nn 中每个正整数的最少步数。若无法转化,步数为 −1-1。

输入格式

输入一行包含两个正整数 nn 和 xx(1≤x≤n≤500001 \leq x \leq n \leq 50000),分别表示数字范围和起始数字。

输出格式

输出一行包含 nn 个整数,依次表示 xx 转化为 1,2,…,n1, 2, \dots, n 的最少步数,整数之间用空格分隔。

样例

样例输入

8 4

样例输出

2 1 3 0 3 2 3 2

样例解析

  • 转化规则应用:
    • 44 的质因数为 22(4→24 \rightarrow 2,步数 11);
    • 22 是质数,可转化为 11(2→12 \rightarrow 1,步数 11,累计 22 步从 44 到 11);
    • 11 可转化为任意质数(如 3,5,73, 5, 7),因此 4→2→1→34 \rightarrow 2 \rightarrow 1 \rightarrow 3 需 33 步;
    • 66 的质因数为 22 和 33,因此 4→2→64 \rightarrow 2 \rightarrow 6 需 22 步(22 是 66 的质因数);
    • 88 的质因数为 22,因此 4→2→84 \rightarrow 2 \rightarrow 8 需 22 步。

数据范围与提示

  • 数据范围:

    • 80% 的评测用例满足 n≤1000n \leq 1000;
    • 100% 的评测用例满足 1≤n≤500001 \leq n \leq 50000,1≤x≤n1 \leq x \leq n。
  • 转化逻辑:

    • 质因数定义:若质数 pp 能整除 xx(x%p=0x \% p = 0 且 p<xp < x),则 pp 是 xx 的质因数。
    • 步数计算:每一次转化记为 11 步(如 x→px \rightarrow p 记为 11 步,p→1p \rightarrow 1 记为 11 步)。