QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#764970 | #9248. An Easy Math Problem | szy10010# | TL | 0ms | 3556kb | C++23 | 2.1kb | 2024-11-20 11:24:46 | 2024-11-20 11:24:47 |
Judging History
answer
#include<iostream>
#include<set>
#include<queue>
#include<map>
#include<cmath>
#include<string>
#include<vector>
#include<cstring>
#include<algorithm>
#include<unordered_map>
#define pb push_back
#define fi first
#define se second
#define int long long
#define all(x) (x).begin(),(x).end()
#define _for(i, a) for(int i = 0; i < (a); ++i)
#define _rep(i, a, b) for(int i = (a);i <= (b); ++i)
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define u1 (u<<1)
#define u2 (u<<1|1)
//#define endl '\n'
using namespace std;
typedef pair<int,int> PII;
const int INF=0x3f3f3f3f;
const int P=1e9+7;
const int N=1e6+20,M=2*N;
int n,m,k,q[N];
int qmi(int a,int b)
{
int res=1;
while(b)
{
if(b&1)res=res*a%P;
a=a*a%P;
b>>=1;
}
return res;
}
//set<PII>s;
//void dfs(int cnt,int state,vector<PII>&up,vector<PII>&down,int upres,int downres)
//{
// if(!state&&cnt==up.size())state=1,cnt=0;
// if(state&&cnt==down.size())
// {
// int gc=__gcd(upres,downres);
//// cout<<"updown"<<upres<<" "<<downres<<endl;
// if(upres<downres)return ;
// s.insert({upres/gc,downres/gc});
// return ;
// }
// if(!state)
// {
// for(int i=1;i<=up[cnt].se;i++)
// dfs(cnt+1,state,up,down,upres*qmi(up[cnt].fi,i),downres);
// }
// else
// {
// for(int i=1;i<=down[cnt].se;i++)
// dfs(cnt+1,state,up,down,upres,downres*qmi(down[cnt].fi,i));
// }
//}
void solve(){
cin>>n;
vector<PII>v;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
int cnt=0;
while(n%i==0)
{
cnt++;
n/=i;
}
v.pb({i,cnt});
}
}
if(n>1)v.pb({n,1});
int m=v.size();
int res=0;
n=qmi(3,m);
for(int i=0;i<n;i++)
{
vector<PII>up,down;
int now=i;
for(int j=0;j<m;j++)
{
// int check(int i,int j)
// {
// while(j--)i/=3;
// return i%3;
// }
int t=now%3;
now/=3;
if(t==0)up.pb(v[j]);
else if(t==2)down.pb(v[j]);
}
int cnt=1;
for(auto i:up)cnt*=i.se;
for(auto i:down)cnt*=i.se;
res+=cnt;
}
cout<<(res+1)/2<<'\n';
}
signed main(){
IOS;
int T=1;
cin>>T;
_rep(i,1,T){
solve();
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3556kb
input:
10 1 2 3 4 5 6 7 8 9 10
output:
1 2 2 3 2 5 2 4 3 5
result:
ok 10 lines
Test #2:
score: -100
Time Limit Exceeded
input:
2000 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 6469693230 646969323...