QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#1094#692517#9248. An Easy Math ProblemCore_65536Core_65536Failed.2024-10-31 21:59:272024-10-31 21:59:38

Details

Extra Test:

Accepted
time: 141ms
memory: 4460kb

input:

2000
10000000000
9999999998
9999999996
9999999994
9999999992
9999999990
9999999988
9999999986
9999999984
9999999982
9999999980
9999999978
9999999976
9999999974
9999999972
9999999970
9999999968
9999999966
9999999964
9999999962
9999999960
9999999958
9999999956
9999999954
9999999952
9999999950
99999999...

output:

221
41
203
41
32
365
53
14
1094
41
68
41
11
14
338
122
83
122
338
14
95
41
23
203
41
203
23
14
95
41
68
41
1229
122
203
122
11
14
23
14
122
68
68
14
95
41
8
41
50
41
5063
14
284
14
68
41
122
41
23
32
284
41
68
5
23
203
8
14
158
122
23
365
365
122
68
68
32
203
8
41
446
41
8
41
32
41
5468
14
14
14
608...

result:

ok 2000 lines

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#692517#9248. An Easy Math ProblemCore_65536#TL 77ms5472kbC++231.9kb2024-10-31 14:39:012024-10-31 22:43:15

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl '\n'
#define int long long
vector<int>ans;
vector<__int128>res;
unordered_map<int,int>mp;

void dfs(int i,__int128 res1)
{
    if(i==ans.size())
    {
        // cout<<res1<<"\n";
        res.push_back(res1);
        return ;
    }

    for(int j=0;j<=mp[ans[i]];j++)
    {
        int j1=j;
        while(j1--) res1*=ans[i];
        dfs(i+1,res1);
        j1=j;
        while(j1--) res1/=ans[i];
    }
}
// bool is[100000010];
// vector<int>pr;
// void init()
// {
//     for(int i=2;i<=1e8;i++)
//     {
//         if(!is[i]) pr.push_back(i);
//         for(int j=0;j<pr.size()&&pr[j]*i<=1e8;j++)
//         {
//             is[pr[j]*i]=1;
//             if(i%pr[j]==0) break;
//         }
//     }
// }

map<int,int>mp1;
void solve()
{
    int n;
    cin>>n;
    if(mp1.count(n)) 
    {
        cout<<mp1[n]<<"\n";
        return ;
    }
    int tn=n;
    if(n==1)
    {
        cout<<"1\n";
        return ;
    }
    mp.clear();
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)
        {
            while(n%i==0)
            {
                n/=i;
                mp[i]++;
            }
        }
    }
    if(n!=1) mp[n]++;

    ans.clear();
    res.clear();
    

    for(auto i:mp) ans.push_back(i.first);
    


    dfs(0,1);
    
    sort(res.begin(),res.end());

    set<pair<int,int>>st;
    for(int i=0;i<res.size();i++)
    {
        for(int j=i;j<res.size();j++)
        {
            if(res[i]*res[j]>tn) break;

            if(tn%(res[i]*res[j])==0)
            {
                int g=__gcd(res[i],res[j]);
                st.insert({res[i]/g,res[j]/g});
            }
        }
    }
    mp1[tn]=st.size();
    cout<<st.size()<<"\n";
}

signed main ()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    cin>>t;
    while(t--) solve();
    return 0;
}