QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#1097#692517#9248. An Easy Math ProblemCore_65536Core_65536Failed.2024-10-31 22:34:002024-10-31 22:34:00

Details

Extra Test:

Accepted
time: 914ms
memory: 5092kb

input:

2000
10000000000
9999998000
9999996000
9999994000
9999992000
9999990000
9999988000
9999986000
9999984000
9999982000
9999980000
9999978000
9999976000
9999974000
9999972000
9999970000
9999968000
9999966000
9999964000
9999962000
9999960000
9999958000
9999956000
9999954000
9999952000
9999950000
99999480...

output:

221
95
1040
284
137
22964
116
851
473
284
743
4253
410
284
1733
365
536
851
347
284
1580
284
116
1418
158
149
1040
284
410
284
446
851
2195
851
116
365
410
95
5198
95
1013
1418
347
95
1229
1094
1040
851
536
284
2723
95
410
2552
347
365
1418
284
347
662
527
851
1040
284
263
1094
116
95
2048
284
446
2...

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;
}