QOJ.ac
QOJ
ID | Submission ID | Problem | Hacker | Owner | Result | Submit time | Judge time |
---|---|---|---|---|---|---|---|
#1098 | #692517 | #9248. An Easy Math Problem | Core_65536 | Core_65536 | Success! | 2024-10-31 22:36:29 | 2024-10-31 22:36:30 |
Details
Extra Test:
Time Limit Exceeded
input:
2000 10000000000 9999980000 9999960000 9999940000 9999920000 9999900000 9999880000 9999860000 9999840000 9999820000 9999800000 9999780000 9999760000 9999740000 9999720000 9999700000 9999680000 9999660000 9999640000 9999620000 9999600000 9999580000 9999560000 9999540000 9999520000 9999500000 99994800...
output:
result:
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#692517 | #9248. An Easy Math Problem | Core_65536# | TL | 77ms | 5472kb | C++23 | 1.9kb | 2024-10-31 14:39:01 | 2024-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;
}