Так чи Ні#12435

Так чи Ні (Розбір)

Автор задачі:

De3b0o

Підготував:

De3b0o

Редагував:

MathModel

Розв'язання

Щоб перетворити на , використовуючи лише множення на цілі числа z > 1, мають виконуватися дві основні умови:

  1. має ділитися на . Якщо y \pmod x \neq 0, досягти з неможливо, тому відповідь — NO (якщо тільки x=y і k=0).

  2. Ми повинні мати можливість розкласти відношення Q = y/x рівно на множників, кожен з яких більший за .

Нехай Q = y/x.

  • Якщо Q = 1 (тобто x=y): ми можемо отримати лише за k=0 операцій. Якщо k > 0, відповідь — NO, оскільки кожна операція повинна множити щонайменше на 2, а отже значення буде строго зростати.

  • Якщо Q > 1:

    • Мінімальна кількість операцій дорівнює (якщо вибрати z = Q).

    • Максимальна кількість операцій дорівнює загальній кількості простих множників числа . Позначимо її через . Наприклад, якщо Q = 12, то прості множники — це 2 \times 2 \times 3, тому M=3.

    • Будь-яка кількість операцій , така що 1 \le k \le M, є можливою. Це тому, що ми завжди можемо взяти набір із множників і перемножити будь-які два з них, щоб зменшити кількість множників на 1, доки не отримаємо один множник .

Складність для одного набору вхідних даних становить O(\sqrt{y/x}) для знаходження розкладу на прості множники.

for _ in range(int(input())):
    x,y,k=map(int,input().split())
    if k==0:
        print("YES" if x==y else "NO")
        continue
    c=0
    i=2
    while i<=100000:
        c1=c2=0
        while x%i==0:
            x//=i
            c1+=1
        while y%i==0:
            y//=i
            c2+=1
        if c1>c2:
            c=-10**18
        c+=c2-c1
        i+=1
    print("YES" if c>=k else "NO")