/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 432.0 KiB
#2 Accepted 5ms 532.0 KiB
#3 Accepted 20ms 764.0 KiB
#4 Accepted 16ms 540.0 KiB
#5 Accepted 13ms 528.0 KiB
#6 Accepted 12ms 532.0 KiB
#7 Accepted 6ms 532.0 KiB

Code

/*
 *   BISMILLAHIR RAHMANIR RAHIM
 *   ==========================
 *
 *   Submitted By: SAKLAN
 *   North East University Bangladesh
 */

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define ll long long
#define ld long double
#define cinv(v) for(auto &i:v) cin >> i;
#define vi vector<int>
#define vii vector<ll>
#define MOD 1000000007
#define coutv(v) for(auto e:v) cout << e << ' ';
#define srt(v) sort(v.begin(),v.end())
#define rsrt(v) sort(v.rbegin(),v.rend())
#define yes cout<<"Yes\n"
#define no cout<<"No\n"
#define mem(a,b) memset(a, b, sizeof(a) )
#define sqr(a) ((a) * (a))
#define file() freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#define endl '\n'
#define saklan ios::sync_with_stdio(0); cin.tie(0);

ll gcd ( ll a, ll b ) { return __gcd ( a, b ); }
ll lcm ( ll a, ll b ) { return a * ( b / gcd ( a, b ) ); }


int compute(const vi& v, const vi& idx){
    int g = v[idx[0]];
    for(size_t i=1; i<idx.size(); i++){
        g = __gcd(g, v[idx[i]]);
    }
    return g;
}




void solve(){
    int t = 1;
    cin >> t;
    while(t--){
        int n;cin>>n;
        vi v(n);
        cinv(v);

        int sum = 0;

        vi res;

        if(n==1){
            cout << v[0] << endl;
            continue;
        }

//        int sum1 = accumulate(v.begin(),v.end(),0LL);
//        for(int i = 0; i < n; i++){
//            long long sumI = 0;
//            for(int j = i+1; j < n; j++){
//                sumI += gcd(v[i], v[j]);
//            }
//            res.push_back(sumI);
//        }
//
//
//        for(auto val : res) cout << val << " ";
//        cout << endl;


        vi sumG(n+1, 0);
        for(int k=1; k<=n; k++){
            vi idx(k);
            for(int i=0; i<k; i++) idx[i] = i;

            while(1){

                int g = compute(v, idx);
                sumG[k] += g;


                int i = k-1;
                while(i>=0 && idx[i] == n-k+i) i--;
                if(i < 0) break;
                idx[i]++;
                for(int j=i+1;j<k;j++) idx[j] = idx[j-1]+1;
            }
        }


        int ans = 1;
        for(int k=1;k<=n;k++){
            ans = (ans * (sumG[k] % MOD)) % MOD;
        }

        cout << ans << endl;
    }
}




int32_t main() {
    saklan
    solve();

    return 0;
}

Information

Submit By
Type
Submission
Problem
P1105 Ohh that gcd again
Contest
LUCC Presents Intra LU Junior Programming Contest - Replay
Language
C++17 (G++ 13.2.0)
Submit At
2025-09-02 17:38:04
Judged At
2025-09-02 17:38:04
Judged By
Score
100
Total Time
20ms
Peak Memory
764.0 KiB