QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#764949#9248. An Easy Math Problemszy10010#TL 1ms3788kbC++232.2kb2024-11-20 11:18:152024-11-20 11:18:17

Judging History

This is the latest submission verdict.

  • [2024-11-20 11:18:17]
  • Judged
  • Verdict: TL
  • Time: 1ms
  • Memory: 3788kb
  • [2024-11-20 11:18:15]
  • Submitted

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;
}
int check(int i,int j)
{
	while(j--)i/=3;
	return i%3;
}
//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});
//	cout<<"v:";
//	for(auto i:v)cout<<i.fi<<" "<<i.se<<endl;
//	cout<<endl;
	int m=v.size();
//	s.insert({1,1});
	int res=0;
	for(int i=0;i<qmi(3,m);i++)
	{
//		cout<<"i="<<i<<" j=";
		vector<PII>up,down;
		for(int j=0;j<m;j++)
		{
			int t=check(i,j);
//			cout<<t;
			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;
//		dfs(0,0,up,down,1,1);
//		cout<<endl;
	}
	cout<<(res+1)/2<<'\n';
}
signed main(){
	IOS;
	int T=1;
	cin>>T;
	_rep(i,1,T){
		solve();
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3788kb

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...

output:


result: