Hướng dẫn giải của TS10 Đắk Lắk 2023 - Bài 4

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người làm lời giải.


Nộp code mẫu trước khi tự giải được bài tập là một hành vi có thể bị ban.

Tác giả: kieuphat159

Vì ~a_i~ ~\bmod~ ~k = a_j~ ~\bmod~ ~k~

~\Leftrightarrow |a_i - a_j|~ ~\bmod~ ~k = 0~

Từ đây ta tạo mảng ~b~ với ~b_i = |a_{i+1} - a_i|~ và gọi ~G~ là ước chung lớn nhất của tất cả phần tử trong ~b~, sau đó duyệt ~k~ từ ~2~ tới ~G~.

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxn = 105;

int n, a[maxn], b[maxn];

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    cin>>n;
    for(int i = 1; i <= n; i++) cin>>a[i];

    for(int i = 1; i < n; i++) b[i] = abs(a[i+1] - a[i]);

    int G = __gcd(b[1], b[2]);
    for(int i = 3; i < n; i++) G = __gcd(G, b[i]);

    vector<int>ans;
    for(int i = 2; i <= G; i++)
    {
        for(int j = 1; j < n; j++)
        {
            if (b[j]%i != 0) break;
            if (j == n-1) ans.push_back(i);
        }
    }
    if (!ans.size()) cout<<-1;
    else for(int x:ans) cout<<x<<' ';

    return 0;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.