Məsələnin müəllifi: | Al Koasar Hussain (Al_Kaosar) Hazırlayan: | Mohammad Nasser (MOAGEZA) Redaktə edən: | Hasan Saleh (MathModel) |
Həll
Ümumi ideya: Biz elə bir müsbət tam ədədinin mövcud olub-olmadığını tapmalıyıq ki, arifmetik silsilədə bütün cütlər üçün \gcd(a_i, a_j) = g şərti ödənsin.
Əvvəlcə yoxlayırıq ki, ədədi -yə bölünürmü. Əgər bölünmürsə, bu mümkün deyil.
Əgər a = g olarsa, cavab həmişə "YES"-dir, çünki -nin istənilən qatını kimi seçə bilərik.
Əks halda, x = a / g götürək. Əsas müşahidə belədir:
Əgər ədədinin hər hansı sadə böləni varsa və m > p olarsa, onda \gcd > g olan cütlərdən qaçmaq mümkün deyil.
Əgər m \le p (burada — -in ən kiçik sadə bölənidir), onda d = g seçərək şərti ödəyə bilərik.
Deməli, -in ən kiçik sadə bölənini tapırıq və yoxlayırıq ki, bu qiymətdən böyük deyil.
Həllin mürəkkəbliyi hər test halı üçün \mathcal{O}(\sqrt{x})-dir.
#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;
}