/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 548.0 KiB
#2 Accepted 10ms 592.0 KiB
#3 Accepted 47ms 532.0 KiB
#4 Accepted 43ms 536.0 KiB
#5 Accepted 41ms 532.0 KiB
#6 Accepted 40ms 532.0 KiB
#7 Accepted 35ms 532.0 KiB

Code

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pie 2*(acos(0.0))
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define pb push_back
#define endl "\n"
#define lcm(a,b) (a*b)/(__gcd<ll>(a,b))
#define mod 1000000007
#define srt(v) sort(v.begin(),v.end())
#define rsrt(v) sort(v.rbegin(),v.rend())
#define ALLAHU_AKBAR ios::sync_with_stdio(false); cin.tie(nullptr);
//typedef tree<ll, null_type, greater<ll>,rb_tree_tag, tree_order_statistics_node_update> ordered_set;

void sir()
{
    ll n; cin>>n;
    vector<ll>v(n+1);
    ll ans = 0; ll s1 = 0;
    for(ll i=1; i<=n; i++)
    {
        cin>>v[i];
        ans = __gcd(ans,v[i]);
        s1 += v[i];   //size n
    }
    if(n==1)
    {
        cout<<ans<<endl;
        return;
    }
    s1%=mod;
    ans *= s1;
    ans = ans%mod;

    for(ll i=2; i<n; i++)
    {
        vector<vector<ll>>grp;
        for(ll musk=0; musk<(1<<n); musk++)
        {
            ll chk = __builtin_popcount(musk);
            if(chk==i)
            {
                vector<ll>temp;
                //bitset<n>A(musk);

                for(ll c=0; c<n; c++)
                {
                    if(musk&(1<<c))
                    {
                        temp.pb(v[c+1]);
                    }
                }
                grp.pb(temp);
            }


        }
        //debug
//            if(i==2)
//            {
//                for(ll x = 0; x<grp.size(); x++)
//                {
//                    for(auto e:grp[x]) cout<<e<<" "; cout<<endl;
//                }
//
//            }
        ll sum = 0;
        for(ll x=0; x<grp.size(); x++)
        {
            vector<ll>tem = grp[x];
            ll stem = 0;
            for(ll a=0; a<tem.size(); a++)
            {
                stem = __gcd(stem, tem[a]);
            }
            sum += stem;
            sum = sum%mod;
        }
        ans *= sum;
        ans = ans%mod;
    }

    cout<<ans<<endl;
}

int main() {
    ALLAHU_AKBAR

    ll t = 1;
    cin>>t;
    while(t--)
    {
        sir();
    }
    return 0;
}


Information

Submit By
Type
Submission
Problem
P1105 Ohh that gcd again
Contest
LUCC Presents Kick & Code Intra LU Programming Contest
Language
C++17 (G++ 13.2.0)
Submit At
2025-09-01 06:43:23
Judged At
2025-09-01 06:43:23
Judged By
Score
100
Total Time
47ms
Peak Memory
592.0 KiB