Автор задачі: | Al Koasar Hussain (Al_Kaosar) |
Підготував: | Mohammad Nasser (MOAGEZA) |
Редактор: | Hasan Saleh (MathModel) |
Розв'язання
Загальна ідея: Потрібно з'ясувати, чи існує додатне ціле число таке, що \gcd(a_i, a_j) = g для всіх пар в арифметичній послідовності.
Спочатку перевіримо, чи ділиться на . Якщо ні, це неможливо.
Якщо a = g, то відповідь завжди "YES", оскільки ми можемо вибрати будь-яке , кратне .
Інакше нехай x = a / g. Ключове спостереження таке:
Якщо має простий дільник і m > p, то ми не зможемо уникнути появи пар із \gcd > g.
Якщо m \le p, де — найменший простий дільник числа , ми можемо вибрати d = g, і умова виконуватиметься.
Отже, потрібно знайти найменший простий дільник числа і перевірити, чи не перевищує це значення.
Розв'язок працює за \mathcal{O}(\sqrt{x}) на один набір вхідних даних.
#include <bits/stdc++.h>
using namespace std;
int smallest_prime_factor(int x) {
for (long long i = 2; i * i <= x; i++) {
if (x % i == 0) return i;
}
return x;
}
void solve(){
int a, g, m;
cin >> a >> g >> m;
if(m==1){
cout<<"YES";
return;
}
if (a % g != 0) {
cout << "NO";
return;
}
int x = a / g;
if (x == 1) {
cout << "YES";
return;
}
int p = smallest_prime_factor(x);
if (m <= p) cout << "YES";
else cout << "NO";
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
cout << '\n';
}
return 0;
}